网上的答案百花齐放,能把这三个池的关系说清楚的文章更是凤毛麟角。
我所理解的,常量池是静态的,存在于.class文件中。运行时常量池是动态的,在.class文件被加载到方法区后生成。
字符串常量池独立于常量池。我的理解可能不对,所以希望有知道的大佬提供帮助,谢啦
网上的答案百花齐放,能把这三个池的关系说清楚的文章更是凤毛麟角。
我所理解的,常量池是静态的,存在于.class文件中。运行时常量池是动态的,在.class文件被加载到方法区后生成。
字符串常量池独立于常量池。我的理解可能不对,所以希望有知道的大佬提供帮助,谢啦
是的,【字符串常量池】独立于【运行时常量池】
您所描述的【常量池】的全程应为【class 文件常量池】
【字符串常量池】即【String Pool】实际是一种由C++实现的Map,结构上类似于Hashtable,区别在于其无法自动扩容
在JDK1.6及更早版本中【String Pool】位于【方法区】
在JDK1.7中【String Pool】位于【堆】
在JDK1.8中【String Pool】仍位于【堆】
在JDK1.7中【运行时常量池】位于【方法区】
在JDK1.8中【运行时常量池】位于【元空间】
网上的答案百花齐放是因为作者没有给出他所使用的JDK版本造成的
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
3 回答1.7k 阅读✓ 已解决
是的 另外所谓的字符串常量池其实就是一个string table 只保存引用 是全局共享的 和运行时常量池不是一回事