[英]Java - String Memory Leaks
String str1 = "Test";
final String str2 = new String("Test");
众所周知,str1将在字符串池中创建,而str2将在堆中创建。 在这里,两个对象都是不可变的。 性能(在执行GC时)有什么区别吗? 说在Heap中创建String对象会导致内存泄漏是正确的吗?
说在Heap中创建String对象会导致内存泄漏是正确的吗?
否。当没有对该对象的引用时,它将像任何其他对象一样有资格进行垃圾回收。
不,堆中的String对象不会导致内存泄漏。 可以像常规对象一样对它们进行垃圾收集。
但是,您可能要使用大量内存来保存内容相同的字符串对象。 与创建一百万个不同的对象相比,持有一百万个对同一对象的引用的内存效率更高。
请注意,您可以使用intern函数将在运行时获得的字符串添加到String池中。
public class Test {
public static void main(String[] args) {
new Test().run();
}
private void run() {
String str1 = "Test";
String str2 = "Test";
System.out.println(str1 == str2);
String str3 = new String("Test");
String str4 = new String("Test");
System.out.println(str3 == str4);
String str5 = str3.intern();
String str6 = str3.intern();
System.out.println(str5 == str6);
}
}
输出:
true false true
尽管确实是将字符串对象存储在堆中并进行垃圾回收,但是我遇到了一些问题,因为JVM会保留引用。 查看javolution,它是一个实时库,可以帮助您优化代码以实现高吞吐量。 事后看来,由于我们遇到的所有问题,我会选择与Java不同的语言,但是这里是:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.