假设在Java中的字符串被声明为String s = "hi"
垃圾收集
我只是想知道,如果上面创建的String对象永远不会被垃圾收集?
如果我写s = null
,这时String对象会被垃圾收集吗?
假设在Java中的字符串被声明为String s = "hi"
垃圾收集
我只是想知道,如果上面创建的String对象永远不会被垃圾收集?
如果我写s = null
,这时String对象会被垃圾收集吗?
JVM将字符串加载到字符串常量池中。这不是由javac或JIT编译器完成的。当没有更多的对象引用时,以这种方式加载到常量池中的String可以像其他任何对象一样清除。这将需要卸载该类,但如果您的应用程序以这种方式工作,则会发生这种情况。
一个小术语:它实际上是“常量池”。 –
从不。字符串文字由JVM –
实现。但是,如果您执行'String s1 = s + 1; s1 = null',那么可以收集s1字符串。 – SJuan76
你为什么在意?在Java(非Android)中唯一需要担心的是在某处是否有任何“遗留”引用 - 例如,旧的HashMap,您应该已经清除了,但是留下了一个相对静态的对象。 –