搜尋

首頁  >  問答  >  主體

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

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

如题。

伊谢尔伦伊谢尔伦2768 天前849

全部回覆(4)我來回復

  • 伊谢尔伦

    伊谢尔伦2017-04-18 10:00:39

    個人感覺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...

    回覆
    0
  • 大家讲道理

    大家讲道理2017-04-18 10:00:39

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

    回覆
    0
  • 天蓬老师

    天蓬老师2017-04-18 10:00:39

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

    回覆
    0
  • 迷茫

    迷茫2017-04-18 10:00:39

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

    回覆
    0
  • 取消回覆