1. 程式人生 > >幾種JVM垃圾回收機制

幾種JVM垃圾回收機制


1.1.標記-清除收集器

這種收集器首先遍歷物件圖並標記可到達的物件,然後掃描堆疊以尋找未標記物件並釋放它們的記憶體。這種收集器一般使用單執行緒工作並停止其他操作。

1.2.標記-壓縮收集器

有時也叫標記-清除-壓縮收集器,與標記-清除收集器有相同的標記階段。在第二階段,則把標記物件複製到堆疊的新域中以便壓縮堆疊。這種收集器也停止其他操作。

1.3.複製收集器

這種收集器將堆疊分為兩個域,常稱為半空間。每次僅使用一半的空間,jvm生成的新物件則放在另一半空間中。gc執行時,它把可到達物件複製到另一半空間,從而壓縮了堆疊。這種方法適用於短生存期的物件,持續複製長生存期的物件則導致效率降低。

1.4.增量收集器

增量收集器把堆疊分為多個域,每次僅從一個域收集垃圾。這會造成較小的應用程式中斷。

1.5.分代收集器

這種收集器把堆疊分為兩個或多個域,用以存放不同壽命的物件。jvm生成的新物件一般放在其中的某個域中。過一段時間,繼續存在的物件將獲得使用期並轉入更長壽命的域中。分代收集器對不同的域使用不同的演算法以優化效能。

1.6.併發收集器

併發收集器與應用程式同時執行。這些收集器在某點上(比如壓縮時)一般都不得不停止其他操作以完成特定的任務,但是因為其他應用程式可進行其他的後臺操作,所以中斷其他處理的實際時間大大降低。

1.7.並行收集器

並行收集器使用某種傳統的演算法並使用多執行緒並行的執行它們的工作。在多cpu機器上使用多執行緒技術可以顯著的提高java應用程式的可擴充套件性。