1. 程式人生 > >再問jvm記憶體管理

再問jvm記憶體管理

——jvm為什麼年輕代一定要劃分成兩個區域,為什麼老年代不分,為什麼一定要分代。

1、為什麼要分代:

  分代的唯一理由就是優化GC效能。如果沒有分代,那我們所有的物件都在一塊,GC的時候我們要找到哪些物件沒用,這樣就會對堆的所有區域進行掃描。而我們的很多物件都是朝生夕死的,如果分代的話,我們把新建立的物件放到某一地方,當GC的時候先把這塊存“朝生夕死”物件的區域進行回收,這樣就會騰出很大的空間出來。

 

2、對於年輕代分割槽:

  年輕代使用的複製演算法,這就要求年輕代要分成兩個區域:Eden空間以及Survivor空間。而對於老年代,書P71說明了“複製收集演算法在物件存活率較高時就要進行較多的複製操作,效率將會變低”。所以老年代不使用複製演算法,所以不用分割槽域。

 

參考:https://blog.csdn.net/zp357252539/article/details/52197708