采访Java中的垃圾收集

时间:2017-07-20 07:06:27

标签: java garbage-collection

我最近被问到有关JAVA垃圾收集的问题。它就像 - 如果我有三个变量(比如说),a,b,c如下所示。 那么这些将是垃圾收集的顺序。

class Test{

static String a;

private String b;

Test(String a, String b)

{
    this.a=a;
    this.b=b;
}

void disp(){

    System.out.println(a+" "+ b);
}

public static void main(String[] args){

    String c="Not you Again";
    Test t= new Test("Hello","World");

    t.disp();
    System.out.println("Value of c = "+c);
}

}

我知道像Young Gen,Middle Gen& Perm Gen以及物体如何在它们之间移动并收集。但变量上的垃圾收集是我不喜欢的东西。 请帮忙!

3 个答案:

答案 0 :(得分:1)

当VM该死的时候,所有三个字符串变量都将被垃圾收集,如果它曾经该死的话,并且没有人能够控制它。任何人声称他们知道这些字符串何时或甚至是否会被垃圾收集,都在说谎。

答案 1 :(得分:0)

Test.at.bc引用的值不会被垃圾收集,因为main时它们仍然在范围内完成运行。也就是说,VM退出时没有垃圾收集它们。

至于a构造函数中的参数bTest,它们可能是垃圾收集的,但它不太可能。这个特别的程序要完成得太快,垃圾收集器甚至无法启动。

答案 2 :(得分:0)

垃圾收集器永远不会在这个特定的例子中运行。 垃圾收集器仅在没有活动线程存活时运行,在此示例中没有死线程,垃圾收集器将永远不会运行。  垃圾收集器仅由JVM激活,我们无法控制它,虽然我们只能发出请求来运行它,但JVM可以忽略此请求。