搜索

首页  >  问答  >  正文

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

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

如题。

伊谢尔伦伊谢尔伦2768 天前848

全部回复(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
  • 取消回复