Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
211 views
in Technique[技术] by (71.8m points)

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

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

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

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to Vigges Developer Community for programmer and developer-Open, Learning and Share

2.1m questions

2.1m answers

63 comments

56.6k users

...