关于JVM参数-XX:SurvivorRatio的理解
关于JVM参数-XX:SurvivorRatio的理解
JVM参数中有一个比较重要的参数SurvivorRatio,它定义了新生代中Eden区域和Survivor区域(From幸存区或To幸存区)的比例,默认为8,也就是说Eden占新生代的8/10,From幸存区和To幸存区各占新生代的1/10
-XX:SurvivorRatio
这里举个例子,如果我们通过设置-Xmn60M来指定新生代分配的空间大小,那么Eden则会分配60M * 0.8 = 48M,Survivor一共分配60M * 0.2 = 12M的内存空间
下面我们通过实际命令行的演示来验证上面的结果
启动参数配置
-Xmn60M
-XX:SurvivorRatio=8
-XX:+PrintFlagsFinal
控制台输出
uintx NewSize := 62914560 {product}
uintx MaxNewSize := 62914560 {product}
注:这里只列举了部分重要的指标
可以看到新生代内存大小为62914560B=60M已经生效,因为Eden区和Survivor区的大小使用JVM参数无法在控制台中查到,所以我们借助Java VisualVM中的Visual GC插件来查看具体指标
OK,指标验证已完成!
参数值分析
经过上面的测试我们已经大致理解了新生代内存分配的策略,其实到这一步还没有结束,我们还需要搞清楚下面几个问题:
- Eden和Survivor比例有什么标准或要求吗?
- 为什么要设置Eden和Survivor的大小比例?
假设1:Eden区域设置太大
新生成的对象会被分配在Eden区,Eden空间不足时会触发MinorGC。理想状态下,如果所有对象在这个阶段全部被回收,Eden区域被清空,不会出什么问题。如果GC后还存在一部分幸存的对象,则会被复制到To Survivor区域,此时因为Survivor区域空间太小无法容纳这些对象,结果大部分幸存对象只在进行一次或很少次的GC后就会被移动到老年代,也就是说从某种程度上来讲失去了MinorGC的初衷,这种情况是肯定不被允许的
假设2:Eden区域设置太小
接着分析,Eden区域设置太小,意味着其空间很快就会被占满,也就是说增加了新生代的GC次数,而频繁的GC会降低整体JVM性能
总结
一般情况下该参数使用默认值即可,除非你在JVM优化领域有着非常丰富的经验。总之,尽可能最小化"短暂对象"移动到老年代的数量,同时最小化年轻代GC的次数和持续时间,要找到适当的折衷方案,首先要了解应用程序中对象年龄的分布情况
关于JVM参数-XX:SurvivorRatio的理解相关推荐
- JVM参数-XX:+HeapDumpOnOutOfMemoryError使用方法
1.配置方法 在JAVA_OPTIONS变量中增加 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${目录}. 例如:export JAVA_OPT ...
- JVM参数-XX:+HeapDumpOnOutOfMemoryError
前言 jdk 1.8 eclipse 4.9.0 spring boot 2.0.0.RELEASE -XX:+HeapDumpOnOutOfMemoryError 当堆内存空间溢出时输出堆的内存快照 ...
- JVM 参数 -XX:+PrintGCDetails
-XX:+PrintGCDetails 表示打印 gc 详细信息 例如 普通 gc 的详细信息 2020-09-14T23:21:32.853+0800:[GC (Allocation Failure ...
- 启动脚本,以及jvm参数含义
一.startup.sh: #!bin/sh if[!-x logs];then mkdir logs fi export EXEC=taskcenter.jar export CLASSPATH=. ...
- java jvm 内存参数_深入详解JVM内存模型与JVM参数详细配置
对于大多数应用来说,Java 堆(Java Heap)是Java 虚拟机所管理的内存中最大的一块.Java 堆是被所有线程共享的一块内存区域,在虚拟机启动时创建. JVM内存结构 由上图可以清楚的看到 ...
- 深入详解JVM内存模型与JVM参数详细配置
本系列会持续更新. JVM基本是BAT面试必考的内容,今天我们先从JVM内存模型开启详解整个JVM系列,希望看完整个系列后,可以轻松通过BAT关于JVM的考核. BAT必考JVM系列专题 1.JVM内 ...
- 直通BAT必考题系列:深入详解JVM内存模型与JVM参数详细配置
JVM基本是BAT面试必考的内容,今天我们先从JVM内存模型开启详解整个JVM系列,希望看完整个系列后,可以轻松通过BAT关于JVM的考核. BAT必考JVM系列专题 1.JVM内存模型 2.JVM垃 ...
- jvm 参数_一文带你深入了解JVM内存模型与JVM参数详细配置
JVM基本是BAT面试必考的内容,今天我们先从JVM内存模型开启详解整个JVM系列,希望看完整个系列后,可以轻松通过BAT关于JVM的考核. 一.JVM内存结构 由上图可以清楚的看到JVM的内存空间分 ...
- JVM参数详细配置说明
对于大多数应用来说,Java 堆(Java Heap)是Java 虚拟机所管理的内存中最大的一块.Java 堆是被所有线程共享的一块内存区域,在虚拟机启动时创建. 1. JVM内存结构 由上图可以清楚 ...
最新文章
- 神策数据受邀参加第五届中国全渠道峰会,聚焦大数据驱动线上线下融合
- java 中iterator 和 collection接口源码
- 一个类可以有一个接口,接口可以有一个Java类吗?
- linux shell 逻辑运算符、逻辑表达式
- STM8单片机低功耗---活跃停机(Active Halt)模式实现-3
- pytorch学习笔记(三十四):MiniBatch-SGD
- YY创始人体内植入芯片真相调查
- [洛谷P5068][Ynoi2015]我回来了
- Java贪吃蛇全代码
- 点互信息PMI(Pointwise Mutual Information)
- 【测开方法论】测开平台pk心得-抉择
- 使用 TX2 和 realsense D435i 相机运行 ORBSLAM3
- ubuntu安装软件包命令_从Ubuntu命令行搜索安装软件包
- 不同性质的公司在英文中不同说法
- JavaScript——ES8新特性
- 洛谷——B2015 计算并联电阻的阻值(java)
- 输出斐波那契数列前n项以及前n项和
- 地图采集车的那些事 | 时间同步
- 美团点评2020校招测试方向笔试题
- LinkCloud引领云主机免申请免费试用潮流