jvm 新生代、老年代
来源:互联网 发布:数据统计的网站 编辑:程序博客网 时间:2024/04/27 16:03
Java堆中是JVM管理的最大一块内存空间。主要存放对象实例。
在JAVA中堆被分为两块区域:新生代(young)、老年代(old)。
堆大小=新生代+老年代;(新生代占堆空间的1/3、老年代占堆空间2/3)
新生代又被分为了eden、from survivor、to survivor(8:1:1);
新生代这样划分是为了更好的管理堆内存中的对象,方便GC算法---复制算法来进行垃圾回收。
JVM每次只会使用eden和其中一块survivor来为对象服务,所以无论什么时候,都会有一块survivor空间,因此新生代实际可用空间只有90%。
新生代GC(minor gc)----------指发生在新生代的垃圾回收动作,因为JAVA对象大多数都是朝生夕死的特性,所以minor gc非常平凡,使用复制算法快速的回收。
新生代几乎是所有JAVA对象出生的地方,JAVA对象申请的内存和存放都是在这个地方。
当对象在eden(其中包括一个survivor,假如是from),当此对象经过一次minor gc后仍然存活,并且能够被另外一块survivor所容纳(这里survivor则是to了),则使用复制算法将这些仍然存活的对象复制到to survior区域中,然后清理掉eden和from survivor区域,并将这些存活的对象年龄+1,以后对象在survivor中每熬过一次gc则增加1,当年龄达到某个值时(默认15,通过设置参数-xx:maxtenuringThreshold来设置),这些对象就会成为老年代!
但是也不一定,当一些较大的对象(需要分配连续的内存空间)则直接进入老年代。
老年代GC(major/full gc)----------指发生在老年代的垃圾回收动作,所采用是的标记--整理算法。
老年代几乎都是经过survivor熬过来的,它们是不会那么容易“死掉”,因此major gc不会想minor gc那样频繁。
对象分配的另外两条原则:
1、长期存活的对象将进入老年代。Eden区中的对象在一次Minor GC后没有被回收,则对象年龄+1,当对象年龄达到“-XX:MaxTenuringThreshold”设置的值的时候,对象就会被晋升到老年代中
2、Survivor空间中相同年龄的所有对象大小总和大于Survivor空间的一半,年龄大于或等于该年龄的对象就可以直接进入老年代,无须等到“-XX:MaxTenuringThreshold”设置要求的年龄
阅读全文
0 0
- JVM 新生代老年代
- JVM 新生代老年代
- jvm 老年代新生代
- jvm 新生代、老年代
- jvm新生代 老年代 永久代
- JVM之新生代进入老年代
- 新生代、老年代
- 新生代与老年代
- 新生代和老年代
- 新生代和老年代
- 新生代和老年代
- JVM垃圾回收算法之新生代和老年代
- 【JVM】java 虚拟机--新生代与老年代GC
- JVM垃圾回收算法之新生代和老年代
- java JVM 堆新生代与老年代及回收方式
- jvm中新生代和老年代的理解
- Java GC、新生代、老年代
- Java GC、新生代、老年代
- 中国象棋
- 标绘点、线导出含高程值的表格数据
- 在敏捷项目中应用功能点方法示例
- 判断一棵二叉树是不是完全二叉树
- MySQL 5.6 for REHL 6.4编译安装
- jvm 新生代、老年代
- 移动端的导航栏联动(滚动监听)
- 《算法导论》第三章-第2节_练习(参考答案)
- 无向图的邻接矩阵存储
- 学习热修复的一些基础知识
- Python的Select模块
- 暑期集训之求N的阶乘末尾0的个数
- 审核回调原子化方案
- span 内容过多时强制换行 而不隐藏