java survivor_JVM之Survivor区使用率以及对象晋升年龄
本文基于jdk1.8
Survivor区中From和To区域默认使用率都是50%,在new对象过程中,如果eden区不够对象会进入Survivor区,如果Survivor区容量不够,对象会直接分配进入年老代。
Survivor区中存在的对象,jvm会记录其晋升年龄,并且会自动计算晋升年龄阈值,如果对象晋升年龄超过阈值,则会进入年老代。
以下两个参数可以控制Survivor区使用率,以及晋升年龄最大阈值:
#Survivor区使用率
-XX::TargetSurvivorRatio
#晋升年龄最大值
-XX:MaxTenuringThreshold
下面我们运行一段代码来演示一下,我们打算分配1024的空间给jvm,并且关闭其自动调整eden和Survivor大小的策略,保持这两个区的空间分配稳定。
运行程序后,通过jmap查看堆空间,FROM和TO space大概是10MB,所以我们代码每次分配7MB的空间,用来测试大于50%但是小于FROM SPACE的场景;这样可以观察到对象是否直接进入年老代。
#准备代码
private static List list = Lists.newArrayList();
public void gcTest() throws Exception {
list.add(new byte[1024 * 1024 * 7]);
LOG.info("初始化对象...");
}
#运行程序,关闭动态调整策略(-XX:-UseAdaptiveSizePolicy),Survi
java survivor_JVM之Survivor区使用率以及对象晋升年龄相关推荐
- Java运行时数据区及对象的分配
一.Java运行时数据区 简图: 简述: 堆.方法区是线程共享的,虚拟机栈.程序计数器.本地方法栈是线程私有的,一个线程一份. 虚拟机栈的基本单位是栈帧,一个方法的开始执行意味着一个栈帧进栈,一个方法 ...
- java eden s0 s1_JVM内存结构--新生代及新生代里的两个Survivor区(下一轮S0与S1交换角色,如此循环往复)、常见调优参数...
一.为什么会有年轻代 我们先来屡屡,为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完全可以,分代的唯一理由就是优化GC性能.你先想想,如果没有分代,那我们所有的对象都在一块,GC的时候我 ...
- java 新生代中的Eden与两个Survivor区详解
1.为什么会有年轻代 我们先来屡屡,为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完全可以,分代的唯一理由就是优化GC性能.你先想想,如果没有分代,那我们所有的对象都在一块,GC的时候我 ...
- 46栈内存溢出、内存区域(程序计数器、Java 虚拟机栈、本地方法栈、Java 堆、方法区、直接内存、内存溢出)与内存溢出(对象实例化分析)
46.什么情况下会发生栈内存溢出 46.1.Java 内存区域与内存溢出 46.1.1.内存区域 46.1.1.1.程序计数器 46.1.1.2.Java 虚拟机栈 46.1.1.3.本地方法栈 46 ...
- JVM内存模型和性能调优:JVM内存分配与回收:Minor GC后存活的对象Survivor区放不下- 第26篇
Minor GC后存活的对象Survivor区放不下,这种情况会把存活的对象部分挪到老年代,部分可能还会放在Survivor区. (1)当我们的代码中有allocation1和allocation2 ...
- Survivor区放不下存活对象,那么存活对象直接就分配到老年代?
调整JVM参数如下: -XX:NewSize=10485760-新生代大小为10m -XX:MaxNewSize=10485760-新生代最大大小为10m -Xms20M-初始堆大小为20m -Xmx ...
- JVM(Java虚拟机模型、Java运行时数据区模型)
一.Java代码运行原理 .java编译变成.class文件. 类加载器把.class字节码文件加载到JVM中. JVM中的字节码执行引擎从指定的main()方法开始执行代码. 二.类被加载的时机 代 ...
- 新生代Eden与两个Survivor区的解释
文章出处:http://ifeve.com/jvm-yong-generation/ 聊聊JVM的年轻代 1.为什么会有年轻代 我们先来屡屡,为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分 ...
- 年轻代为什么要设置两个Survivor区
设置两个Survivor区最大的好处就是解决了碎片化. 为什么一个Survivor区不行?第一部分中,我们知道了必须设置Survivor区.假设现在只有一个survivor区,我们来模拟一下流程: ...
- 为什么新生代内存需要有两个Survivor区
在我的上一篇博客中,介绍了JVM堆内存的结构以及在堆中进行的GC机制,链接是浅谈JAVA GC机制与性能优化 那么,在JVM的新生代内存中,为什么除了Eden区,还要设置两个Survivor区? 1 ...
最新文章
- pandas基于条件判断更新dataframe中所有数据列数值内容的值(Conditionally updating all values in pandas Dataframe )
- 马云口中的“计划经济”其实是一种大数据和人工智能
- 虚拟化VMware之存储与虚拟机主机管理(1)
- js中的arguments 参数
- 龙卷风优化软件测试面试题,暑X好物大推荐,最强真无线降噪耳机带你开启夏日解压模式...
- psa name_Windows 10安全性PSA:启用自动商店更新
- 【华为云技术分享】华为云ServiceStage正式加入Spring生态大家族!
- matlab hrv,利用ECG信号进行HRV分析
- 异步ajax动态实现级联,JQuery异步加载无限下拉框级联功能实现示例
- Markdown公式编辑总结
- 陶渊明《移居》二首的赏析
- WIN7 IE8假死现象解决方法
- Android 开发常用性能优化工具总结
- linux环境下安装cwp的地震专业软件su
- SQL零基础入门学习(十三)
- 【学透二叉树-二叉搜索树(二叉树)的最近公共祖先】
- 接入层、汇聚层、核心层之间的区别
- window常用终端命令
- Python3雷霆战机2D+双人联机+源码+解压运行(总之啥都有)
- python马蜂窝网站的爬取和简单分析。