我最近被问到有关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以及物体如何在它们之间移动并收集。但变量上的垃圾收集是我不喜欢的东西。 请帮忙!
答案 0 :(得分:1)
当VM该死的时候,所有三个字符串变量都将被垃圾收集,如果它曾经该死的话,并且没有人能够控制它。任何人声称他们知道这些字符串何时或甚至是否会被垃圾收集,都在说谎。
答案 1 :(得分:0)
Test.a
,t.b
或c
引用的值不会被垃圾收集,因为main
时它们仍然在范围内完成运行。也就是说,VM退出时没有垃圾收集它们。
至于a
构造函数中的参数b
和Test
,它们可能是垃圾收集的,但它不太可能。这个特别的程序要完成得太快,垃圾收集器甚至无法启动。
答案 2 :(得分:0)
垃圾收集器永远不会在这个特定的例子中运行。 垃圾收集器仅在没有活动线程存活时运行,在此示例中没有死线程,垃圾收集器将永远不会运行。 垃圾收集器仅由JVM激活,我们无法控制它,虽然我们只能发出请求来运行它,但JVM可以忽略此请求。