垃圾回收机制
来源:互联网 发布:python 判断类型相同 编辑:程序博客网 时间:2024/06/06 00:51
复制算法中为什么会有两个survivor区?
HotSpot JVM把年轻代分为了三部分:1个Eden区和2个Survivor区(分别叫from和to)。默认比例为8:1,为啥默认会是这个比例,接下来我们会聊到。一般情况下,新创建的对象都会被分配到Eden区(一些大对象特殊处理),这些对象经过第一次Minor GC后,如果仍然存活,将会被移到Survivor区。对象在Survivor区中每熬过一次Minor GC,年龄就会增加1岁,当它的年龄增加到一定程度时,就会被移动到年老代中。
因为年轻代中的对象基本都是朝生夕死的(80%以上),所以在年轻代的垃圾回收算法使用的是复制算法,复制算法的基本思想就是将内存分为两块,每次只用其中一块,当这一块内存用完,就将还活着的对象复制到另外一块上面。复制算法不会产生内存碎片。
在GC开始的时候,对象只会存在于Eden区和名为“From”的Survivor区,Survivor区“To”是空的。紧接着进行GC,Eden区中所有存活的对象都会被复制到“To”,而在“From”区中,仍存活的对象会根据他们的年龄值来决定去向。年龄达到一定值(年龄阈值,可以通过-XX:MaxTenuringThreshold来设置)的对象会被移动到年老代中,没有达到阈值的对象会被复制到“To”区域。经过这次GC后,Eden区和From区已经被清空。这个时候,“From”和“To”会交换他们的角色,也就是新的“To”就是上次GC前的“From”,新的“From”就是上次GC前的“To”。不管怎样,都会保证名为To的Survivor区域是空的。Minor GC会一直重复这样的过程,直到“To”区被填满,“To”区被填满之后,会将所有对象移动到年老代中。
- 垃圾回收机制--回收周期
- 垃圾回收机制
- 垃圾回收机制
- 垃圾回收机制
- .net 垃圾回收机制
- flex 垃圾回收机制
- 垃圾回收机制
- java垃圾回收机制
- 垃圾回收机制
- 垃圾回收机制
- .NET垃圾回收机制
- php垃圾回收机制
- C++垃圾回收机制
- php垃圾回收机制
- 垃圾回收机制
- Java垃圾回收机制
- PHP 垃圾回收机制
- flex垃圾回收机制
- HDU 6168 Numbers 思维
- phpstorm 实现同步代码到远程虚拟机
- java-基础复习-工具类
- 【Solution】Git添加GitHub远程库免去账号密码验证
- javascript数据结构系列(五)-串
- 垃圾回收机制
- angular2中数据绑定方法总结和管道使用
- 以百度地图为例,对android手机移动端地图开发进行简介
- Java高并发,如何解决,什么方式解决
- linux-python编程
- 学生信息管理系统的构建2--Sqlite3的使用
- 陕西多校OI模拟赛day3t3 贺老师含树
- SSM配置之一Mybatis
- 深入JVM内核——原理、诊断与优化