针对 HotSpot VM 的实现,它里面的 GC 其实准确分类只有两大种:

部分收集 (Partial GC):

  • 新生代收集(Minor GC / Young GC):只对新生代进行垃圾收集;
  • 老年代收集(Major GC / Old GC):只对老年代进行垃圾收集。需要注意的是 Major GC 在有的语境中也用于指代整堆收集; 混合收集(Mixed GC):对整个新生代和部分老年代进行垃圾收集。
  • 整堆收集 (Full GC):收集整个 Java 堆和方法区。

这是 JDK1.8 默认收集器

命令查看

java -XX:+PrintCommandLineFlags -version

结果:

java -XX:+PrintCommandLineFlags -version
-XX:InitialHeapSize=255449920 -XX:MaxHeapSize=4087198720 -XX:+PrintCommandLineFlags -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC
java version "1.8.0_351"
Java(TM) SE Runtime Environment (build 1.8.0_351-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.351-b10, mixed mode)

jdk1.8 默认垃圾收集器Parallel Scavenge(新生代)+Parallel Old(老年代)

  • 新生代:Eden 空间、From Survivor0(“From”) 区、To Survivor1(“To”) 区 占堆的1/3
  • Eden、From、To区默认比例是8:1:1
  • 老年代: 占堆的2/3

GC(Allocation Failure) 日志分析

GC(Allocation Failure)是因为在年轻代中没有足够的空间能够存储新的数据了。

10.240: [GC (Allocation Failure) [PSYoungGen: 2097664K->55234K(2446848K)] 2182542K->140129K(8039424K), 0.1030998 secs] [Times: user=1.57 sys=0.12, real=0.10 secs]

10.240:虚拟机运行了 110.240s

PSYoungGen: 2097664K->55234K(2446848K) 年轻代减少了 2097664-55234=2,042,430K 年轻代的总大小:2446848K

2182542K->140129K(8039424K) 堆由2182542-140129=2,042,413K 总堆大小:8039424K

2,042,430-2,042,413=17K 表明17K的内存由年轻代转移到了老年代

0.1030998 secs 表明该内存区域GC耗时

[Times: user=1.57 sys=0.12, real=0.10 secs]

user=1.57 CPU工作在用户态所花费的时间, sys=0.12 CPU工作在内核态所花费的时间, real=0.10 secs 此次GC事件中所花费的总时间

[Full GC (Ergonomics) [PSYoungGen: 932352K->685805K(1864192K)] [ParOldGen: 5592278K->5592278K(5592576K)] 6524630K->6278084K(7456768K), [Metaspace: 107385K->107385K(1150976K)], 8.6867896 secs] [Times: user=447.43 sys=4.52, real=8.69 secs]

PSYoungGen: 932352K->685805K(1864192K) 新生代由932352-685805=246,547K 新生代总大小为1864192K

ParOldGen: 5592278K->5592278K(5592576K) 老年代由5592278-5592278=0 老年代总大小为5592576K

6524630K->6278084K(7456768K) 堆大小由6524630-6278084=246,546K 总堆大小为7456768K

新生代减少的减去堆总共减少的246,547-246,546=1K 即为新生代移到了老年代的内存

老年代已经放不下新的对象了,导致FULL GC。

  • real:指的是在此次GC事件中所花费的总时间;
  • user:指的是CPU工作在用户态所花费的时间;
  • sys:指的是CPU工作在内核态所花费的时间。

JVM配置

-Xms8g -Xmx8g -XX:MetaspaceSize=1g  XX:+PrintGCDetails -XX:+PrintGCApplicationStoppedTime -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${LOG_PATH} -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=50M -XX:+PrintGCTimeStamps -Xloggc:${LOG_PATH}${GC_LOG}

显示Java堆的如下信息

jmap -heap pid
Heap Configuration:
MinHeapFreeRatio         = 0
MaxHeapFreeRatio         = 100
MaxHeapSize              = 12884901888 (12288.0MB)
NewSize                  = 4294967296 (4096.0MB)
MaxNewSize               = 4294967296 (4096.0MB)
OldSize                  = 8589934592 (8192.0MB)
NewRatio                 = 2
SurvivorRatio            = 8
MetaspaceSize            = 1073741824 (1024.0MB)
CompressedClassSpaceSize = 1073741824 (1024.0MB)
MaxMetaspaceSize         = 17592186044415 MB
G1HeapRegionSize         = 0 (0.0MB)Heap Usage:
PS Young Generation
Eden Space:
capacity = 3221225472 (3072.0MB)
used     = 1827898984 (1743.220314025879MB)
free     = 1393326488 (1328.779685974121MB)
56.745452930529915% used
From Space:
capacity = 536870912 (512.0MB)
used     = 72443664 (69.08766174316406MB)
free     = 464427248 (442.91233825683594MB)
13.493683934211731% used
To Space:
capacity = 536870912 (512.0MB)
used     = 0 (0.0MB)
free     = 536870912 (512.0MB)
0.0% used
PS Old Generation
capacity = 8589934592 (8192.0MB)
used     = 134181224 (127.9651870727539MB)
free     = 8455753368 (8064.034812927246MB)
1.562075037509203% used36483 interned Strings occupying 3541232 bytes.

显示堆各个区域内存使用和垃圾回收的统计信息

jstat -gc pid

结果:

S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT

40960.0 3584.0 0.0 3456.0 422912.0 160413.2 699392.0 51690.4 77568.0 73798.3 9472.0 8810.5 23 0.705 0 0.000 0.705

-gc选项

  • S0C:年轻代中第一个Survivor区的容量,单位为KB。
  • S1C:年轻代中第二个Survivor区的容量,单位为KB。
  • S0U:年轻代中第一个Survivor区已使用大小,单位为KB。
  • S1U:年轻代中第二个Survivor区已使用大小,单位为KB。
  • EC:年轻代中Eden区的容量,单位为KB。
  • EU:年轻代中Eden区已使用大小,单位为KB。
  • OC:老年代的容量,单位为KB。
  • OU:老年代已使用大小,单位为KB。
  • MC:元空间的容量,单位为KB。
  • MU:元空间已使用大小,单位为KB。
  • CCSC:压缩类的容量,单位为KB。
  • CCSU:压缩类已使用大小,单位为KB。
  • YGC:Young GC的次数。
  • YGCT:Young GC所用的时间。
  • FGC:Full GC的次数。
  • FGCT:Full GC的所用的时间。
  • GCT:GC的所用的总时间。

打印当前指定java进程中已经设定的所有JVM参数信息

jinfo -flags pid

结果:

Non-default VM flags: -XX:CICompilerCount=18 -XX:GCLogFileSize=52428800 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=null -XX:InitialHeapSize=17179869184 -XX:MaxHeapSize=17179869184 -XX:MaxNewSize=5726273536 -XX:MetaspaceSize=2147483648 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=5726273536 -XX:NumberOfGCLogFiles=10 -XX:OldSize=11453595648 -XX:+PrintGC -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:+UseParallelGC
Command line:  -Xms16g -Xmx16g -XX:MetaspaceSize=2g -Djava.awt.headless=false -XX:+PrintGCDetails -XX:+PrintGCApplicationStoppedTime -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/log/ymsadmin/dev/ -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=50M -XX:+PrintGCTimeStamps -Xloggc:/log/admin/dev/test-service-gc.log

JVM--GC相关记录相关推荐

  1. 【甘道夫】HBase随机宕机事件处理 JVM GC回顾

    一.引言 本文记录了困扰团队两周的HBase随机宕机事件的解决方案,并回顾了JVM GC调优基础知识,供各位参考. 欢迎转载,请注明出处: http://blog.csdn.net/u01096738 ...

  2. jvm gc停顿_在JVM中记录世界停顿

    jvm gc停顿 不同的事件可能导致JVM暂停所有应用程序线程. 这种暂停称为世界停止(STW)暂停. 触发STW暂停的最常见原因是垃圾回收( 例如github中的示例 ),但是不同的JIT操作( 示 ...

  3. JAVA之JVM GC 机制与性能优化

    1 背景介绍 与C/C++相比,JAVA并不要求我们去人为编写代码进行内存回收和垃圾清理.JAVA提供了垃圾回收器(garbage collector)来自动检测对象的作用域),可自动把不再被使用的存 ...

  4. Jmeter性能测试-GC相关

    2019独角兽企业重金招聘Python工程师标准>>> https://www.cnblogs.com/danqiu/p/6009016.html Jmeter性能测试-GC相关 1 ...

  5. 一文看尽 JVM GC 调优

    一个著名的学习方法论 向橡皮鸭求助 学会提问,提问也是一门艺术 提问前,先投入自己的时间做好功课 发生了什么事情 问题的基本情况 你投入的研究和发现 能正确提出你的问题,你的问题差不多已经解决一半 深 ...

  6. JVM GC(垃圾回收机制)

    在学习Java GC 之前,我们需要记住一个单词:stop-the-world .它会在任何一种GC算法中发生.stop-the-world 意味着JVM因为需要执行GC而停止了应用程序的执行.当st ...

  7. 【JVM · GC】垃圾回收器

    1. GC分类与性能指标 1.1 垃圾回收期器概述 垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商.不同版本的JVM来实现. 由于 JDK 版本处于高速迭代过程中,因此Java 发展至今已经衍 ...

  8. java服务器gc停顿_如何避免后台IO高负载造成的长时间JVM GC停顿(转)

    译者著:其实本文的中心意思非常简单,没有耐心的读者建议直接拉到最后看结论部分,有兴趣的读者可以详细阅读一下. 原文发表于Linkedin Engineering,作者 Zhenyun Zhuang是L ...

  9. JVM GC 日志详解

    本文采用的JDK版本: java version "1.8.0_144" Java(TM) SE Runtime Environment (build 1.8.0_144-b01) ...

  10. JVM:gc什么时候开始?System.gc()能保证gc一定发生吗?

    gc什么时候开始? "你能不能谈谈,java GC是在什么时候,对什么东西,做了什么事情?" 在什么时候: 1.新生代有一个Eden区和两个survivor区,首先将对象放入Ede ...

最新文章

  1. vsnprintf的作用和使用
  2. hc05与单片机连接图_基于proteus的51单片机开发实例(13)-LED指示那个按键被按下
  3. 发现asp.net 2.0 在MSDN中的多个BUG 关于无刷新窗体的
  4. Git Push 避免输入用户名和密码方法
  5. 【HDU - 6558】The Moon(期望dp)
  6. 解决mac管理员变成普通成员
  7. 【华为云技术分享】40多元成本制作基于Arduin的随动四轴机械臂,机械臂实现步骤记录、复现等功能
  8. 打印机共享,局域网打印机连接,安装驱动,安装打印机等问题总结
  9. matlab中 概率密度估计ksdensity,k-s检验kstest和kstest2(单/双样本检验数据是否符合某种分布)
  10. 由内而外全面进化,影像娱乐都出彩,vivo S12 Pro上手
  11. HTML文档繁转简,excel简繁转换 切换到“审阅”,点击“繁转简”:
  12. Qt自定义进度条示例
  13. 小程序可通过这三种方式去做竞品分析
  14. 关于构造和二进制,题目:牛牛的DRB迷宫Ⅱ(源自牛客竞赛2020年寒假集训)
  15. 第十四届蓝桥杯大赛软件赛省赛 C/C++ 大学 B 组
  16. matlab恒定值,基于MATLAB的明渠恒定非均匀渐变流水面线的数值计算
  17. 如何把项目上传到码云平台?
  18. pool win10提示bad_Win10蓝屏问题:BAD_POOL_HEADER
  19. HD Tune Pro
  20. 情绪调节的自适应_自我情绪调节的几种方法

热门文章

  1. win10打开蓝牙,蓝牙开关消失,蓝牙和其他设备设置,蓝牙开关不见了
  2. Netty源码解析-Netty内存泄露检测
  3. 计算机基础---03Excel篇(入门,身份证筛选出生年月,自动填充功能,表格排序,自动筛选,高级筛选,数据有效性,求和)
  4. java开发微信公众号图片上传功能,不吃透都对不起自己
  5. QT 程序运行异常问题总结
  6. matlab矩阵变成行向量,matlab中将一个矩阵按照行拼成一个行向量应该怎么输?
  7. PYNQ-overlay
  8. MediaPlayer的消息机制分析
  9. 去法国,买哪些伴手礼既有面子又不破费
  10. 液晶电视英文linux使用教程,【详解UbuntuTV 电视与人们的生活】PjTime.COM液晶电视 技术介绍...