JVM中常量池、运行时常量池以及字符串常量池的关系?

网上的答案百花齐放,能把这三个池的关系说清楚的文章更是凤毛麟角。
我所理解的,常量池是静态的,存在于.class文件中。运行时常量池是动态的,在.class文件被加载到方法区后生成。
字符串常量池独立于常量池。我的理解可能不对,所以希望有知道的大佬提供帮助,谢啦

阅读 3.5k
2 个回答

是的 另外所谓的字符串常量池其实就是一个string table 只保存引用 是全局共享的 和运行时常量池不是一回事

是的,【字符串常量池】独立于【运行时常量池】

您所描述的【常量池】的全程应为【class 文件常量池】
【字符串常量池】即【String Pool】实际是一种由C++实现的Map,结构上类似于Hashtable,区别在于其无法自动扩容

在JDK1.6及更早版本中【String Pool】位于【方法区】
在JDK1.7中【String Pool】位于【堆】
在JDK1.8中【String Pool】仍位于【堆】

在JDK1.7中【运行时常量池】位于【方法区】
在JDK1.8中【运行时常量池】位于【元空间】

网上的答案百花齐放是因为作者没有给出他所使用的JDK版本造成的

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题