Java字符串常量池StringTable在哪个区

可以确定的是:
JDK6中,字符串常量池中的对象在方法区(在Perm Space)中;
JDK7中,字符串常量池中的对象移到了堆Heap中;

StringTable中保存了这些字符串常量对象的引用,那这个StringTable本身在哪个区,是跟着这些对象一起迁移的吗?

扩展阅读:美团-深入解析String.intern()

阅读 3.7k
2 个回答

StringTable 是 C++ 写的,不在 Java 这几个托管内存里,而是在 C-Heap 里,也就是所谓 Native Memory。

// openjdk/hotspot/src/share/vm/classfile/symbolTable.cpp#730
class StringTable : public Hashtable<oop, mtSymbol> {
}

StringTable一直在native memory

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