【发布时间】:2011-11-08 04:44:51
【问题描述】:
我知道 JVM 维护一个字符串文字池以提高性能并维护 JVM 内存,并了解到字符串文字是在字符串池中维护的。但是我想澄清一些与在堆上创建的字符串池和字符串对象有关的事情。
如果我的解释有误,请纠正我。
String s = "abc";
如果上面的行被执行,如果字符串池中不存在“abc”字符串字面量,它就会被添加到字符串池中。并且在堆上创建字符串对象,并且引用 s 将指向池中的文字。
问题:
- 这段代码每次执行时都会在堆上创建字符串对象吗?
- 字符串文字池是只维护字符串文字还是也维护字符串对象?
- JVM 何时决定需要将字符串文字添加到字符串池中?它是在编译时还是运行时决定的?
如果字符串对象指向池中的字符串文字,我不确定它是在哪里创建的。
谢谢。
【问题讨论】: