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