jvm垃圾收集的一个问题,望大虾抽空回答
chenjingbo
2011-07-08
我有一个疑问,就是在新生代中,按照hotspot jvm的做法是分成一块eden 两块suvivor 。系统默认是8:1:1 。一般的做法是在gc的时候,将eden 和其中suvivor中from space 的存活对象复制到to space中。我的疑问是,为什么不直接分一块eden 一块suvivor,然后自己设置两个的比例。
刚才问了另外一个朋友,他的回答是多区域可以同步复制和比例可调。。但是疑问还是没消,同步复制的话那不是可以分为n个空间,不一定只分成三个,比例可调的话就算只分成两块,比例也是可以调节的吧。。 望大虾们赐教。 |
|
huxi
2011-07-08
chenjingbo 写道 我的疑问是,为什么不直接分一块eden 一块survivor,然后自己设置两个的比例。
你可以自己调节eden和survivor的大小比例。heap分为新生代和旧生代是为了根据其特性使用不同的垃圾回收算法。Oracle HotSpot认为在新生代中的对象存活时间是很短的,而新生代的垃圾回收使用了Copying算法,那么既然是Copy就总得有from和to吧,所以survivor分成了S0和S1,即两部分,也就是from和to。新建的对象大部分都在eden上分配(大对象直接分配在旧生代),经历GC后会被移动到survivor区,在经历几次GC后(S0和S1之间copy),依旧存活的对象被移动到旧生代。每次GC后,S0和S1只有其中一个区域被占用,另一部分就是是空的了。 |
|
chenjingbo
2011-07-08
十分感谢您的回答,我差不多弄清楚了。
|
相关讨论
相关资源推荐
- EWeb4J 1.9.1 新版本发布 基于Servlet/JDBC的轻量级web开发框架
- 轻量级JavaWeb开发框架EWeb4J
- 轻量级JavaWeb开发框架EWeb4J作者赖伟威专访
- Easy Web Development Framework for Java
- ITeye 2012年11月最后1周重要新闻回顾
- 毕业设计&课设_CUMT 信息安全专业毕业设计:基于区块链的能源交易系统,含架构、部署等多方面详细介绍.zip
- 用Python分析文本数据项目
- 基于SpringBoot的养老院管理系统源码数据库文档.zip
- AshampooUnInstaller v15.00.22 Portable一款强大的卸载工具,彻底、智能著称阿香婆强制卸载软件.rar
- 基于java的公交车信息管理系统开题报告.docx