![](/img/trans.png)
[英]Java job interview. How many objects are eligible for garbage collection?
[英]Interview on Garbage Collection in Java
最近有人問我有關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,以及如何在它們之間移動和收集對象。 但是我對變量的垃圾回收是陌生的。 請幫忙!
當VM令人討厭時,所有這三個字符串變量都將被垃圾回收,如果該令人討厭,並且沒有人對此有任何控制權。 聲稱他們知道何時甚至什至這些字符串將被垃圾回收的任何人都在說謊。
Test.a
, tb
或c
引用的值永遠不會被垃圾回收,因為當main
完成運行時,它們仍然在范圍內。 也就是說,VM退出時不會進行垃圾回收。
至於Test
構造函數中的參數a
和b
,可能會被垃圾回收,但這是非常不可能的。 這個特定的程序完成得太快,以至於垃圾回收器甚至無法啟動。
在此特定示例中,垃圾收集器將永遠不會運行。 垃圾收集器僅在沒有活動線程處於活動狀態時運行,在此示例中,沒有死線程,因此垃圾收集器將永遠不會運行。 垃圾收集器僅由JVM激活,盡管可以發出運行請求,但我們無法控制它,但是JVM可以忽略此請求。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.