java虛擬機爲什麼要分代回收

堆內存是虛擬機管理的內存中最大的一塊,也是垃圾回收最頻繁的一塊區域,我們程序所有的對象實例都存放在堆內存中。給堆內存分代是爲了提高對象內存分配和垃圾回收的效率。

試想一下,如果堆內存沒有區域劃分,所有的新創建的對象和生命週期很長的對象放在一起,隨着程序的執行,堆內存需要頻繁進行垃圾收集,而每次回收都要遍歷所有的對象,遍歷這些對象所花費的時間代價是巨大的,會嚴重影響我們的GC效率,這簡直太可怕了。

有了內存分代,情況就不同了,新創建的對象會在新生代中分配內存,經過多次回收仍然存活下來的對象存放在老年代中,靜態屬性、類信息等存放在永久代中,新生代中的對象存活時間短,只需要在新生代區域中頻繁進行GC,老年代中對象生命週期長,內存回收的頻率相對較低,不需要頻繁進行回收,永久代中回收效果太差,一般不進行垃圾回收,還可以根據不同年代的特點採用合適的垃圾收集算法。

分代收集大大提升了收集效率,這些都是內存分代帶來的好處。

總結:
1.分代之後不同年代回收頻率不一樣。
2.不同年代回收算法不一樣。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章