java中的字符串垃圾收集

时间:2012-10-07 18:24:39

标签: java string garbage-collection

假设Java中的字符串声明为String s = "hi"

我只想知道上面创建的String对象是否会被垃圾回收?

如果我写s = null,此时String对象会被垃圾收集吗?

2 个答案:

答案 0 :(得分:2)

以这种方式,编译器将其移动到文字池。现在,所有“hi”实例都将被池中的这个值替换,这实际上是编译器优化内存使用的一种方式。 不,这些值永远不会被垃圾收集。但是,在运行时创建的String对象将被垃圾回收。

答案 1 :(得分:1)

JVM将String文字加载到String常量池中。这不是由javac或JIT编译器完成的。当没有对该对象的更多引用时,以这种方式加载到comnstant池中的String可以像任何其他对象一样被清除。这将要求卸载类,但如果您的应用程序以这种方式工作,则会发生这种情况。