java - 为什么JVM中新生代有两个Survivor区?
伊谢尔伦
伊谢尔伦 2017-04-18 09:58:39
0
4
847

为什么JVM中新生代有两个Survivor区?

如题。

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回覆(4)
伊谢尔伦

個人感覺S0和S1的存在是為了提高性能。

survivor space的使用:

在任何時候,總有一個survivor space是empty的,在下一次coping collection時,會將eden和另一個survivor space裡的live object copy到這個裡面。
live objects在兩個survivor space裡copy來copy去,直到物件old enough可以放到tenured generation裡(copy 過去的)

因為在垃圾收集的時候需要將dead object清理掉,如果只有一個survivor區,那麼這個survivor區裡的dead object在清理掉之後就會產生內存碎片,為了避免內存碎片那麼必須將live object移動來移動去,這樣就會損失性能。

如果有兩個survivor區,依照上面的說法,就不會有記憶體碎片的問題。

SO的答案在這裡:http://stackoverflow.com/ques...

大家讲道理

新生代使用的是复制收集算法,两个Survivor区是为了配合复制收集算法
我在我的一篇日誌裡詳細的介紹了這類問題,有興趣可以來看一下。

Peter_Zhu

每次GC後,兩個Survivor會互換位置
目前了解到的只有怎麼一丟丟哈

迷茫

用來防止碎片的產生,這就是傳說中的夥伴系統。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板