Jvm实际运行情况-JVM(十七)

上篇文章说jmap和jstat的命令,如何查看youngGc和FullGc耗时和次数。

Jmap-JVM(十六)

  • Jvm实际运行情况

背景:

机器配置:2核4G

JVM内存大小:2G

系统运行天数:7天

期间发生FULL GC次数和耗时:500多次,200多秒

期间发生Yoing GC次数和耗时:1万多次,500多秒

算下来fullGC平均耗时,0.4s(每次400ms左右)

每天发生1万多次,则每分钟发生1次,每次YoungGC耗费50ms

JVM参数配置:

-Xms1536M -Xmx1536M -Xmn512M -Xss256K -XX:SurvivorRatio=6

-XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M

-XX:+UseParNewGC -XX:+UseConcMarkSweepGC

-XX:CMSInitiatingOccupancyFraction=75 -XX:UseCMSInitiatingOccupancyOnly

通过以上参数我们可以分析出:

  1. 堆内存是1个G+512M
  2. 年轻代是512M,老年代是1G
  3. 因为比例是6:1:1,年轻代eden则是384M,S0和S1分别是64M
  4. 线程栈256K,元空间256M

前面我们说过,

  1. 大对象会进入老年代。
  2. 对象年龄太大会进入老年代。
  3. 对象动态年龄判断,当进入对象大小大于这块survivor区域的百分之50,会把大于年龄1的对象都放入老年代。
  4. 老年代分配担保机制:每次minor gc之前都会jvm计算老年代剩余可用空间,如果这个可用空间小于年轻代里现在所有对象大小之和(包括垃圾对象),就会看参数

-XX:HandlerPromotionFailure是否设置。如果没有设置,则直接fullGC,如果fullGC完还不能,则会发生OOM。

如何设置了,则会看老年代可用空间大小是否小于每次minor gc对象平均大小。大于的话才会minor gc。

相关推荐
没有bug.的程序员15 小时前
AOT 与 GraalVM Native Image 深度解析
java·jvm·测试工具·aot·gc·gc调优·graalvm native
周杰伦_Jay16 小时前
【JVM深度解析】运行时数据区+类加载+GC+调优实战(附参数示例)
java·jvm·spring boot·分布式·架构·java-ee
子超兄16 小时前
GC/OOM问题处理思路
java·jvm
C++业余爱好者17 小时前
Java技术栈五要素:JDK/JRE/JVM/Tomcat/JAR包的关系详解
java·jvm·tomcat
【非典型Coder】17 小时前
JVM类加载详解
jvm
C++业余爱好者17 小时前
JVM优化入门指南:JVM新生代、老年代的核心概念与内存分配逻辑
java·开发语言·jvm
代码不停17 小时前
JVM基础知识
java·jvm·java-ee
没有bug.的程序员17 小时前
云原生 + JIT:冷启动与预热优化
java·jvm·云原生·日志·gc·jit
没有bug.的程序员18 小时前
大规模微服务下的 JVM 调优实战指南
java·jvm·spring·wpf·延迟
江沉晚呤时18 小时前
使用 C# 和 Semantic Kernel 构建 PDF 向量搜索系统:从文本提取到语义搜索
jvm·人工智能·microsoft·chatgpt·c#