本文基于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区使用率以及对象晋升年龄相关推荐

  1. Java运行时数据区及对象的分配

    一.Java运行时数据区 简图: 简述: 堆.方法区是线程共享的,虚拟机栈.程序计数器.本地方法栈是线程私有的,一个线程一份. 虚拟机栈的基本单位是栈帧,一个方法的开始执行意味着一个栈帧进栈,一个方法 ...

  2. java eden s0 s1_JVM内存结构--新生代及新生代里的两个Survivor区(下一轮S0与S1交换角色,如此循环往复)、常见调优参数...

    一.为什么会有年轻代 我们先来屡屡,为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完全可以,分代的唯一理由就是优化GC性能.你先想想,如果没有分代,那我们所有的对象都在一块,GC的时候我 ...

  3. java 新生代中的Eden与两个Survivor区详解

    1.为什么会有年轻代 我们先来屡屡,为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完全可以,分代的唯一理由就是优化GC性能.你先想想,如果没有分代,那我们所有的对象都在一块,GC的时候我 ...

  4. 46栈内存溢出、内存区域(程序计数器、Java 虚拟机栈、本地方法栈、Java 堆、方法区、直接内存、内存溢出)与内存溢出(对象实例化分析)

    46.什么情况下会发生栈内存溢出 46.1.Java 内存区域与内存溢出 46.1.1.内存区域 46.1.1.1.程序计数器 46.1.1.2.Java 虚拟机栈 46.1.1.3.本地方法栈 46 ...

  5. JVM内存模型和性能调优:JVM内存分配与回收:Minor GC后存活的对象Survivor区放不下- 第26篇

    Minor GC后存活的对象Survivor区放不下,这种情况会把存活的对象部分挪到老年代,部分可能还会放在Survivor区. (1)当我们的代码中有allocation1和allocation2 ...

  6. Survivor区放不下存活对象,那么存活对象直接就分配到老年代?

    调整JVM参数如下: -XX:NewSize=10485760-新生代大小为10m -XX:MaxNewSize=10485760-新生代最大大小为10m -Xms20M-初始堆大小为20m -Xmx ...

  7. JVM(Java虚拟机模型、Java运行时数据区模型)

    一.Java代码运行原理 .java编译变成.class文件. 类加载器把.class字节码文件加载到JVM中. JVM中的字节码执行引擎从指定的main()方法开始执行代码. 二.类被加载的时机 代 ...

  8. 新生代Eden与两个Survivor区的解释

    文章出处:http://ifeve.com/jvm-yong-generation/ 聊聊JVM的年轻代 1.为什么会有年轻代 我们先来屡屡,为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分 ...

  9. 年轻代为什么要设置两个Survivor区

    设置两个Survivor区最大的好处就是解决了碎片化. 为什么一个Survivor区不行?第一部分中,我们知道了必须设置Survivor区.假设现在只有一个survivor区,我们来模拟一下流程:  ...

  10. 为什么新生代内存需要有两个Survivor区

    在我的上一篇博客中,介绍了JVM堆内存的结构以及在堆中进行的GC机制,链接是浅谈JAVA GC机制与性能优化 那么,在JVM的新生代内存中,为什么除了Eden区,还要设置两个Survivor区? 1 ...

最新文章

  1. pandas基于条件判断更新dataframe中所有数据列数值内容的值(Conditionally updating all values in pandas Dataframe )
  2. 马云口中的“计划经济”其实是一种大数据和人工智能
  3. 虚拟化VMware之存储与虚拟机主机管理(1)
  4. js中的arguments 参数
  5. 龙卷风优化软件测试面试题,暑X好物大推荐,最强真无线降噪耳机带你开启夏日解压模式...
  6. psa name_Windows 10安全性PSA:启用自动商店更新
  7. 【华为云技术分享】华为云ServiceStage正式加入Spring生态大家族!
  8. matlab hrv,利用ECG信号进行HRV分析
  9. 异步ajax动态实现级联,JQuery异步加载无限下拉框级联功能实现示例
  10. Markdown公式编辑总结
  11. 陶渊明《移居》二首的赏析
  12. WIN7 IE8假死现象解决方法
  13. Android 开发常用性能优化工具总结
  14. linux环境下安装cwp的地震专业软件su
  15. SQL零基础入门学习(十三)
  16. 【学透二叉树-二叉搜索树(二叉树)的最近公共祖先】
  17. 接入层、汇聚层、核心层之间的区别
  18. window常用终端命令
  19. Python3雷霆战机2D+双人联机+源码+解压运行(总之啥都有)
  20. python马蜂窝网站的爬取和简单分析。

热门文章

  1. 第0周周赛——极限手速赛(题解)之下篇
  2. Walkers闪屏和引导界面
  3. [ArcGIS] 焦点统计应用 提取山顶点 地形起伏度
  4. frp配置多端口内网穿透?frp多端口怎么配置?
  5. 数字图像处理期末复习习题 SCUEC part2
  6. 特斯有望2020年在中国量产Model 3,售价不到30万人民
  7. IDE模式下安装Window7,改回achi的方法
  8. 通过VLAN技术实现某公司部门之间的网络互通
  9. [转载]打工辛酸路:我是一朵飘零的花之48
  10. 搭建fabric环境中出的一系列错误