为什么JVM中新生代有两个Survivor区?
如题。
小伙看你根骨奇佳,潜力无限,来学PHP伐。
個人感覺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 過去的)
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区是为了配合复制收集算法。 我在我的一篇日誌裡詳細的介紹了這類問題,有興趣可以來看一下。
复制收集算法
每次GC後,兩個Survivor會互換位置目前了解到的只有怎麼一丟丟哈
用來防止碎片的產生,這就是傳說中的夥伴系統。
個人感覺S0和S1的存在是為了提高性能。
因為在垃圾收集的時候需要將dead object清理掉,如果只有一個survivor區,那麼這個survivor區裡的dead object在清理掉之後就會產生內存碎片,為了避免內存碎片那麼必須將live object移動來移動去,這樣就會損失性能。
如果有兩個survivor區,依照上面的說法,就不會有記憶體碎片的問題。
SO的答案在這裡:http://stackoverflow.com/ques...
新生代使用的是
复制收集算法
,两个Survivor区是为了配合复制收集算法
。我在我的一篇日誌裡詳細的介紹了這類問題,有興趣可以來看一下。
每次GC後,兩個Survivor會互換位置
目前了解到的只有怎麼一丟丟哈
用來防止碎片的產生,這就是傳說中的夥伴系統。