以下情况是否会导致内存泄漏?
案例1
在这里,我没有使用new运算符,所以当我们不使用new运算符并将object1赋值给object2时,我不确定它在Java中是如何工作的。
public void doSomething() {
String a1 = "Hello";
String a2;
while(true) {
a2 = a1;
}
}
案例2
在这里,
public void doSomething() {
String a1 = new String("Hello");
String a2;
while(true) {
a2 = new String(a1);
}
}
答案 0 :(得分:0)
您没有分配更多内存,因此您无法泄露任何内存。在一个循环之后,变量a1
和a2
将引用完全相同的单个String
实例。
不,因为它所有正在创建的String
个实例只会被垃圾收集,但你离它不远:
while(true) {
a2 = new String(a1);
a2.intern();
}
通过将字符串放在垃圾收集器的PermGen(永久生成)中,然后丢失对它的任何引用(在下一个循环迭代中),这将被归类为内存泄漏。