以下情况会导致内存泄漏吗?

时间:2017-02-27 22:20:17

标签: java memory-leaks

以下情况是否会导致内存泄漏?

案例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);
     }
 }

1 个答案:

答案 0 :(得分:0)

案例1

您没有分配更多内存,因此您无法泄露任何内存。在一个循环之后,变量a1a2将引用完全相同的单个String实例。

案例2

不,因为它所有正在创建的String个实例只会被垃圾收集,但你离它不远:

while(true) {
    a2 = new String(a1);
    a2.intern();
}

通过将字符串放在垃圾收集器的PermGen(永久生成)中,然后丢失对它的任何引用(在下一个循环迭代中),这将被归类为内存泄漏。