簡體   English   中英

gc方法如何工作?

[英]How does gc method work?

public class GarbageC {
public void finalize()
{
System.out.println("Finalize method");  
}
public static void main(String[] args) {
    GarbageC c1=new GarbageC();
    GarbageC c2=new GarbageC();
    c1=null;
    c2=null;
    System.gc();
    System.out.println("abc");
}
}

當我調試此代碼時,o / p即將

Finalize method
Finalize method
abc

當我跑步時,我得到了

abc
Finalize method
Finalize method

為什么兩種情況下我的輸出都不同

調用System.gc()是一個請求。 運行時不必做垃圾收集作為響應。 完全可以決定不理你。 因此,您不能依靠它始終如一地做同樣的事情。

在調試模式下,確實有可能導致運行垃圾回收。 在非調試模式下,它要么不收集垃圾,要么等到適當的時候收集垃圾。

如果您經常運行它,則可能會獲得3種可能的輸出中的任何一種。

垃圾回收進程可能在專用線程中運行(至少會在任何最新的VM中運行),因此輸出取決於每個線程(您的主線程和VM的GC線程)的速度。

在調試模式下,主線程要慢得多(單步執行代碼時,您可以不確定地暫停它)。 因此,GC超過了您的主線程。 當您僅運行程序時; 在VM甚至嘗試進行垃圾收集之前,主線程很可能會一直運行到完成。

調用System.gc()只是一個請求“嘿, 做一個gc”,即使VM認可了它(不需要這樣做),您的請求也將傳遞給GC線程; 在GC實際開始工作之前,至少需要稍作延遲; 還有一些時間,直到它真正發現您的垃圾對象,然后最終將它們收集起來。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM