假设Java中的字符串声明为String s = "hi"
我只想知道上面创建的String对象是否会被垃圾回收?
如果我写s = null
,此时String对象会被垃圾收集吗?
答案 0 :(得分:2)
以这种方式,编译器将其移动到文字池。现在,所有“hi”实例都将被池中的这个值替换,这实际上是编译器优化内存使用的一种方式。 不,这些值永远不会被垃圾收集。但是,在运行时创建的String对象将被垃圾回收。
答案 1 :(得分:1)
JVM将String文字加载到String常量池中。这不是由javac或JIT编译器完成的。当没有对该对象的更多引用时,以这种方式加载到comnstant池中的String可以像任何其他对象一样被清除。这将要求卸载类,但如果您的应用程序以这种方式工作,则会发生这种情况。