关于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的理解相关推荐

  1. JVM参数-XX:+HeapDumpOnOutOfMemoryError使用方法

    1.配置方法 在JAVA_OPTIONS变量中增加 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${目录}. 例如:export JAVA_OPT ...

  2. JVM参数-XX:+HeapDumpOnOutOfMemoryError

    前言 jdk 1.8 eclipse 4.9.0 spring boot 2.0.0.RELEASE -XX:+HeapDumpOnOutOfMemoryError 当堆内存空间溢出时输出堆的内存快照 ...

  3. JVM 参数 -XX:+PrintGCDetails

    -XX:+PrintGCDetails 表示打印 gc 详细信息 例如 普通 gc 的详细信息 2020-09-14T23:21:32.853+0800:[GC (Allocation Failure ...

  4. 启动脚本,以及jvm参数含义

    一.startup.sh: #!bin/sh if[!-x logs];then mkdir logs fi export EXEC=taskcenter.jar export CLASSPATH=. ...

  5. java jvm 内存参数_深入详解JVM内存模型与JVM参数详细配置

    对于大多数应用来说,Java 堆(Java Heap)是Java 虚拟机所管理的内存中最大的一块.Java 堆是被所有线程共享的一块内存区域,在虚拟机启动时创建. JVM内存结构 由上图可以清楚的看到 ...

  6. 深入详解JVM内存模型与JVM参数详细配置

    本系列会持续更新. JVM基本是BAT面试必考的内容,今天我们先从JVM内存模型开启详解整个JVM系列,希望看完整个系列后,可以轻松通过BAT关于JVM的考核. BAT必考JVM系列专题 1.JVM内 ...

  7. 直通BAT必考题系列:深入详解JVM内存模型与JVM参数详细配置

    JVM基本是BAT面试必考的内容,今天我们先从JVM内存模型开启详解整个JVM系列,希望看完整个系列后,可以轻松通过BAT关于JVM的考核. BAT必考JVM系列专题 1.JVM内存模型 2.JVM垃 ...

  8. jvm 参数_一文带你深入了解JVM内存模型与JVM参数详细配置

    JVM基本是BAT面试必考的内容,今天我们先从JVM内存模型开启详解整个JVM系列,希望看完整个系列后,可以轻松通过BAT关于JVM的考核. 一.JVM内存结构 由上图可以清楚的看到JVM的内存空间分 ...

  9. JVM参数详细配置说明

    对于大多数应用来说,Java 堆(Java Heap)是Java 虚拟机所管理的内存中最大的一块.Java 堆是被所有线程共享的一块内存区域,在虚拟机启动时创建. 1. JVM内存结构 由上图可以清楚 ...

最新文章

  1. 神策数据受邀参加第五届中国全渠道峰会,聚焦大数据驱动线上线下融合
  2. java 中iterator 和 collection接口源码
  3. 一个类可以有一个接口,接口可以有一个Java类吗?
  4. linux shell 逻辑运算符、逻辑表达式
  5. STM8单片机低功耗---活跃停机(Active Halt)模式实现-3
  6. pytorch学习笔记(三十四):MiniBatch-SGD
  7. YY创始人体内植入芯片真相调查
  8. [洛谷P5068][Ynoi2015]我回来了
  9. Java贪吃蛇全代码
  10. 点互信息PMI(Pointwise Mutual Information)
  11. 【测开方法论】测开平台pk心得-抉择
  12. 使用 TX2 和 realsense D435i 相机运行 ORBSLAM3
  13. ubuntu安装软件包命令_从Ubuntu命令行搜索安装软件包
  14. 不同性质的公司在英文中不同说法
  15. JavaScript——ES8新特性
  16. 洛谷——B2015 计算并联电阻的阻值(java)
  17. 输出斐波那契数列前n项以及前n项和
  18. 地图采集车的那些事 | 时间同步
  19. 美团点评2020校招测试方向笔试题
  20. LinkCloud引领云主机免申请免费试用潮流

热门文章

  1. acdream 1725 哗啦啦的小彭玉染色问题 离散化并查集
  2. 大数据告诉你,北上广深哪里最容易吃到你的家乡味儿?
  3. 基于MPC的自适应巡航控制
  4. v-for生成多个div并给div中的组件绑定值
  5. python爬取天猫_Python爬取天猫商品数据
  6. 如何取消服务器自动关机,服务器自动关机求助
  7. 关于babe-loader^8.0.6的配置问题
  8. 程序员崩溃了!稳拿的年终奖怎么说黄就黄?!
  9. Column 'id' in where clause is ambiguous
  10. 看完让你彻底理解 WebSocket 原理