
文章插图
G1默认当分区内存占用阈值达到总内存的45% , 会发生Mixed gc(混和GC),YoungGC + 并发回收Mixed GC过程:初始标记(stw)、并发标记、最终标记(重新标记stw)、筛选回收(stw并行) 。
使用场景:
响应速度优先,较高的吞吐量,面向服务端 , 使用内存6G以上 。
优点:
并行与并发收集,分代分区收集 , 优先垃圾收集,空间整合,可控或者可预测停顿时间 。
缺点:
收集中产生内存,G1的每个region都需要有一份记忆集和卡表记录跨代指针 , 这导致记忆集可能占用堆空间10-20%甚至更多空间 。
执行过程中额外负载开销加大,写屏障进行维护卡表操作外 , 还需要原始快照能够减少并发标记和重新标记阶段的消耗,避免最终标记阶段停顿过长,运行过程中会产生由跟踪引用变化带来的额外开销负担 , 比CMS增量算法消耗更多,CMS的写屏障实现直接是同步操作,而G1是把写屏障和写后屏障中要做的事情放到队列里异步处理 。
G1对于Full GC是没有处理流程, 一旦发生Full GC G1的回收执行的是单线程的Serial回收器进行回收 。
2.2.7 垃圾收集器配置使用
机器配置:64位 4C8G
Java 程序使用CMS收集器进行内存垃圾回收初始内存划分情况:
-Xms4096M -Xmx4096M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/{runuser}/logs/other -XX:+UseConcMarkSweepGC
文章插图
CMS 跟 parNew占比情况,默认下 ParNew占用整个堆的空间为:机器位数 * CPU核数 * 13 /10 , 当前机器配置计算得出 64 * 4 * 13 / 10 = 332M,与图上数值差别不大 。
Java程序使用G1收集器进行内存垃圾回收初始内存划分情况:
-Xms4096M -Xmx4096M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/{runuser}/logs/other -XX:+UseG1GC
文章插图
G1 新老年代的占比是动态调整 , 随着运行时根据实际情况划分空间 。
Java8默认ParallerGC收集器初始内存划分情况:

文章插图
parallel GC回收器默认堆old区与young区内存大小比例 2:1,图上数值差别不大 。
三、内存诊断实践3.1 内存快照生成当发生线上应用告警,告警相关内存故障问题时, 应当如何进行故障排查呢?首先应用在发生内存溢出无法执行时,应DUMP当前内存快照,需要在Java程序执行启动命令时添加上:
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=${filePath} 参数
当发生时自动生成一份当前内存快照,方便与开发人员使用快照文件进行问题诊断分析 。
在Java应用运行时,想手动生成内存快照 , 可以使用JDK自带几个问题排查工具,可以使用jmap工具生成指定PID内存快照,不过需要耗费较长的一个时间 , 会暂停应用程序执行,使用jcmd工具可以快速的DUMP内存快照,因为在堆转储存文件过程中,jcmd可以利用虚拟机中的一些优化技术,例如分代堆、增量式垃圾回收等技术,相比传统的jmap效率高很多,一般来说在DUMP内存前会进行一次
Full FC,可以指定屏蔽这次Full GC , 保留当前所有内存中的对象 。
除了自带的内存诊断工具,也可以使用Arthas诊断工具,提供了多个命令来帮助诊断内存问题,例如 dashboard(当前Java程序内存实时数据面板)、JVM(查看当前JVM信息 , 包括使用的gc收集器、内存分区分布情况等信息)、heapdump(当前内存快照类似jmap命令的heap dump)、memory(当前内存分区及占用情况)、monitor(监控模式,可监控内存及查看对象占用情况)profiler(火焰图可以输出多种火焰图,内存分区占用火焰图)等相关内存命令 。这些命令可以帮助获取应用程序的内存快照、堆内存使用情况等信息,能快速定位内存问题 。
引用:Arthas 命令列表
3.2 dump内存快照分析(1)jhat 是 Java 开发工具包自带的一款堆内存分析工具 , 它可以帮助解决 Java 应用程序的内存问题 。Jhat 可以读取 Java 应用程序生成的堆转储文件,并以 html 格式展示内存中的对象信息和引用关系 , 支持 OQL 查询和灵活的过滤和排序功能 。
用例 jhat E:diydumpJava_pid2680.hprof
推荐阅读
- Containerd容器管理
- 如何编写高性能的Java代码
- 淘宝的评价管理在哪里查看 淘宝的评价管理在哪里
- 微信授权管理在哪里怎么添加应用 微信授权管理在哪里
- 在他人土地上建厕所违反治安管理处罚法吗
- PGO 在Java应用程序中释放峰值性能:配置文件引导优化概述
- 韩国知名女模特,米兰时装周也坚持自我管理,不愧“女版金钟国”
- 酒店客房管理知识点 酒店客房管理知识
- 不良情绪的管理办法包括 不良情绪的管理办法
- 如何管理生成式AI
