如果java中的文本从不被垃圾收集,那么使用新字符串(“String”)构造函数有什么好处

如果java中的文本从不被垃圾收集,那么使用新字符串(“String”)构造函数有什么好处,java,string,garbage-collection,string-literals,Java,String,Garbage Collection,String Literals,简而言之,问题是从一个巨大的字符串创建一个子字符串 因此,作者认为最好使用新字符串(substring)构造函数,因为substring()返回的字符串将使用与父字符串相同的char[],因此如果我们不使用新字符串(),那么庞大的文本仍将被使用。 为了避免不必要的巨大字符[]占用内存,最好使用较小的字符[]创建新的字符串对象,从而缩短文本。 然后可以对巨大的char[]进行垃圾收集 但是 据我所知,这些垃圾永远不会被收集 因此,即使任何局部变量都没有指向巨型char[],它仍然可以留在文本池中

简而言之,问题是从一个巨大的字符串创建一个子字符串 因此,作者认为最好使用新字符串(substring)构造函数,因为substring()返回的字符串将使用与父字符串相同的char[],因此如果我们不使用新字符串(),那么庞大的文本仍将被使用。 为了避免不必要的巨大字符[]占用内存,最好使用较小的字符[]创建新的字符串对象,从而缩短文本。 然后可以对巨大的char[]进行垃圾收集 但是 据我所知,这些垃圾永远不会被收集


因此,即使任何局部变量都没有指向巨型char[],它仍然可以留在文本池中,因此无法有效地使用内存。

这已经过时了<代码>子字符串不再共享底层数组(除非它是no op)。请参阅。确定!从Java7开始,我了解到为子字符串创建了新的char[]。但是这样就完全不需要新的String()构造函数了,不是吗?如果加载定义了字符串的类的类加载器是GCed,java中的字符串文本就可以GCed。