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

查看:189
本文介绍了java - 为什么JVM中新生代有两个Survivor区?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

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

如题。

解决方案

个人感觉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...

这篇关于java - 为什么JVM中新生代有两个Survivor区?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆