JVM 如何分析 GC 日志,定位 GC 性能问题?

GC 日志分析 一点睛 通过阅读 GC 日志,我们可以了解 Java 虚拟机内存分配与回收策略。 内存分配与垃圾回收的参数列表。 -XX:+PrintGC 输出 GC 日志。类似:-verbose:gc -XX:+PrintGCDetails 输出 GC 的详细日志。 -XX:+PrintGCTimeStamps 输出 GC 的时间戳(以基准时间的形式表示)。 -XX:+PrintGCDateStamps 输出 GC 的时间戳(以日期的形式,如2013-05-04T21:53:59. 阅读详情
AI摘要

GC日志记录JVM垃圾回收详细信息,分析它可了解内存使用、GC频率等。本文介绍开启GC日志的常用JVM参数,阐述GC日志格式,说明分析日志的关注点、方法和关键指标,还列举常见GC问题及原因,并给出解决方案,助力JVM调优。

GC(Garbage Collection)日志是 JVM 提供的用于记录垃圾回收过程的详细信息的文件。通过分析 GC 日志,可以了解 JVM 的内存使用情况、GC 的频率、停顿时间、回收效率等,从而帮助我们诊断和解决 GC 相关的性能问题。

1. 开启 GC 日志:

  • 常用 JVM 参数:

    • -XX:+PrintGC: 打印 GC 基本信息(已过时,但仍然可以使用)。
    • -XX:+PrintGCDetails: 打印 GC 详细信息(推荐)。
    • -XX:+PrintGCDateStamps: 在 GC 日志中打印日期和时间戳。
    • -XX:+PrintGCTimeStamps: 在 GC 日志中打印时间戳(相对于 JVM 启动时间的秒数)。
    • -Xloggc:<file>: 将 GC 日志输出到指定文件(例如 -Xloggc:gc.log)。
      • 文件轮转 (File Rotation): 可以使用 -XX:+UseGCLogFileRotation、-XX:NumberOfGCLogFiles、-XX:GCLogFileSize 等参数配置 GC 日志文件轮转。
    • -XX:+PrintGCApplicationStoppedTime: 打印应用程序由于 GC 导致的停顿时间。
    • -XX:+PrintGCApplicationConcurrentTime: 打印应用程序在两次 GC 之间的运行时间.
    • -XX:+PrintHeapAtGC: 在每次 GC 前后打印堆的详细信息。
    • **-XX:+PrintTenuringDistribution: ** 打印 Survivor 区中对象的年龄分布.
    • -Xlog (JDK 9+): 统一日志框架 (Unified Logging Framework). 功能更强大, 配置更灵活.
  • 示例:

    java -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:gc.log -jar myapp.jar
    
    # JDK 9+
    java -Xlog:gc*:file=gc.log:time,level,tags -jar myapp.jar
    

2. GC 日志格式 (HotSpot VM):

GC 日志的格式取决于 JVM 版本和使用的垃圾收集器,没有统一的标准格式。以下是一些常见的 GC 日志信息:

  • GC 类型:

    • Minor GC (Young GC): 新生代垃圾回收。
      • [GC 或 [DefNew (Serial), [ParNew (ParNew), [PSYoungGen (Parallel Scavenge)
    • Major GC (Old GC): 老年代垃圾回收。
      • [Full GC (Serial Old, Parallel Old, CMS), [CMS (CMS), [G1 Old GC, [ZGC
    • Full GC: 对整个堆(包括新生代和老年代)进行垃圾回收。
      • [Full GC
  • 时间信息:

    • 时间戳: GC 发生的时间(例如,2023-10-27T10:00:00.123+0800)。
    • JVM 启动时间: GC 发生的时间(相对于 JVM 启动时间的秒数,例如 1.234s)。
  • 内存信息:

    • GC 前堆使用情况: [PSYoungGen: 100M->10M(150M)] 表示 GC 前新生代使用了 100MB,剩余 10MB,新生代总大小为 150MB。
    • GC 后堆使用情况: [ParOldGen: 200M->180M(300M)] 表示 GC 前老年代使用了 200MB,GC 后使用了 180MB,老年代总大小为 300MB。
    • 总堆使用情况: 250M->190M(450M) 表示 GC 前整个堆使用了 250MB,GC 后使用了 190MB,堆总大小为 450MB。
  • GC 耗时: 例如 0.0123456 secs (单位:秒)。

  • 其他信息:

    • 垃圾回收原因 (Allocation Failure, Ergonomics, Metadata GC Threshold, System.gc(), etc.)
    • 并发标记阶段信息 (CMS, G1)
    • Region 信息 (G1)
    • 对象年龄分布 (Tenuring Distribution)

GC 日志示例 (不同收集器):

  • Serial/Parallel GC:

    [GC (Allocation Failure) [PSYoungGen: 57344K->6688K(62464K)] 57344K->18352K(202752K), 0.0194387 secs] [Times: user=0.06 sys=0.00, real=0.02 secs]
    [Full GC (Ergonomics) [PSYoungGen: 6688K->0K(62464K)] [ParOldGen: 11664K->16366K(140288K)] 18352K->16366K(202752K), [Metaspace: 34567K->34567K(1081344K)], 0.1019658 secs] [Times: user=0.31 sys=0.04, real=0.11 secs]
    
  • CMS:

    [GC (CMS Initial Mark) [1 CMS-initial-mark: 16366K(140288K)] 18704K(202752K), 0.0008393 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
    [CMS-concurrent-mark-start]
    [CMS-concurrent-mark: 0.005/0.005 secs] [Times: user=0.02 sys=0.00, real=0.01 secs]
    [CMS-concurrent-preclean-start]
    [CMS-concurrent-preclean: 0.001/0.001 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
    [CMS-concurrent-abortable-preclean-start]
    [CMS-concurrent-abortable-preclean: 0.005/0.159 secs] [Times: user=0.29 sys=0.03, real=0.16 secs]
    [GC (CMS Final Remark) [YG occupancy: 21947 K (62464 K)]2023-10-27T16:22:32.864+0800: 3.886: [Rescan (parallel) , 0.0176854 secs]2023-10-27T16:22:32.882+0800: 3.903: [weak refs processing, 0.0000398 secs]2023-10-27T16:22:32.882+0800: 3.903: [class unloading, 0.0042382 secs]2023-10-27T16:22:32.886+0800: 3.908: [scrub symbol table, 0.0053587 secs]2023-10-27T16:22:32.892+0800: 3.913: [scrub string table, 0.0004727 secs][1 CMS-remark: 16366K(140288K)] 38313K(202752K), 0.0298176 secs] [Times: user=0.09 sys=0.00, real=0.03 secs]
    [CMS-concurrent-sweep-start]
    [CMS-concurrent-sweep: 0.013/0.013 secs] [Times: user=0.03 sys=0.00, real=0.01 secs]
    [CMS-concurrent-reset-start]
    [CMS-concurrent-reset: 0.001/0.001 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
    
    
  • G1:

    [GC pause (G1 Evacuation Pause) (young) (initial-mark), 0.0017932 secs]
       [Parallel Time: 1.4 ms, GC Workers: 8]
          ...
       [Eden: 128.0M(128.0M)->0.0B(112.0M) Survivors: 0.0B->16.0M Heap: 128.0M(2048.0M)->42.1M(2048.0M)]
     [Times: user=0.01 sys=0.00, real=0.00 secs]
    [GC concurrent-root-region-scan-start]
    ...
    [GC pause (G1 Evacuation Pause) (young) (to-space exhausted), 0.0042688 secs]
       [Parallel Time: 3.8 ms, GC Workers: 8]
       ...
       [Eden: 0.0B(112.0M)->0.0B(112.0M) Survivors: 16.0M->16.0M Heap: 177.1M(2048.0M)->162.4M(2048.0M)]
     [Times: user=0.02 sys=0.00, real=0.01 secs]
    [GC pause (G1 Evacuation Pause) (mixed), 0.0026325 secs]
      ...
       [Eden: 0.0B(112.0M)->0.0B(128.0M) Survivors: 16.0M->0.0B Heap: 208.4M(2048.0M)->194.1M(2048.0M)]
     [Times: user=0.01 sys=0.00, real=0.00 secs]
    [GC cleanup 194M->194M(2048M), 0.0004077 secs]
     [Times: user=0.00 sys=0.00, real=0.00 secs]
    

3. 分析 GC 日志:

  • 关注点:
    • GC 频率: GC 发生的频率是否过高。
    • GC 停顿时间: 每次 GC 暂停了多长时间 (STW)。
    • GC 类型: 是 Minor GC、Major GC 还是 Full GC。
    • 内存使用情况: GC 前后堆内存、新生代、老年代的使用情况。
    • 垃圾回收原因: 了解触发 GC 的原因。
    • 对象年龄分布: (如果开启了 -XX:+PrintTenuringDistribution) 查看对象在 Survivor 区的年龄分布, 了解对象晋升老年代的情况.
  • 分析方法:
    • 手动分析: 阅读 GC 日志,理解每一行的含义,找出潜在的问题。
    • 使用工具分析:
      • GCViewer: 一个开源的 GC 日志可视化分析工具。
      • gceasy.io: 一个在线的 GC 日志分析工具。
      • GChisto: 一个命令行 GC 日志分析工具。
      • VisualVM, JProfiler 等: 可以实时监控GC情况.
    • 关键指标:
      • 吞吐量: 应用程序运行时间占总时间的比例(越高越好)。
      • 停顿时间: GC 导致的应用程序暂停时间(越低越好)。
      • GC 频率: GC 发生的频率(越低越好,但也要避免停顿时间过长)。
      • 内存占用: 应用程序使用的内存量。

4. 常见 GC 问题及原因:

  • 频繁 Minor GC:

    • 原因:
      • 对象分配速率过高。
      • 新生代空间不足。
    • 解决方案:
      • 优化代码,减少对象创建。
      • 增大新生代空间 (-Xmn)。
      • 调整 Eden 区和 Survivor 区的比例 (-XX:SurvivorRatio)。
  • 频繁 Full GC:

    • 原因:
      • 老年代空间不足。
      • 方法区/元空间不足。
      • 大对象过多。
      • 内存泄漏。
      • 显式调用 System.gc()。
    • 解决方案:
      • 增大堆内存 (-Xmx)。
      • 增大方法区/元空间 (-XX:MaxMetaspaceSize)。
      • 避免创建过大的对象。
      • 使用分析工具 (例如,MAT) 查找内存泄漏。
      • 禁用 System.gc() 调用 (-XX:+DisableExplicitGC)。
      • 选择合适的垃圾回收器(例如,G1、CMS)。
      • 调整垃圾回收器参数。
  • GC 停顿时间过长:

    • 原因:
      • 堆内存过大。
      • 垃圾回收器选择不当。
      • 垃圾回收参数设置不合理。
    • 解决方案:
      • 选择合适的垃圾回收器(例如,G1、CMS、ZGC)。
      • 调整垃圾回收器参数(例如,-XX:MaxGCPauseMillis、-XX:CMSInitiatingOccupancyFraction)。
      • 优化代码,减少对象创建。
      • 使用并发垃圾回收器。

总结:

分析 GC 日志是 JVM 调优的重要环节。通过分析 GC 日志,可以了解 JVM 的内存使用情况、GC 的频率、停顿时间、回收效率等,从而找出潜在的性能问题,并进行相应的优化。

快速解读GC日志 其中一次清理的是年轻代(Young generation), 而第二次处理的是整个堆内存。通过上面的分析, 我们可以计算出在垃圾收集期间, JVM 中的内存使用情况。文中将介绍GC日志的输出格式, 以及如何解读GC日志, 从中提取有用的信息。(559,231k), 但总的堆内存使用(total heap usage)只减少了。右边)中蕴含了更重要的结论, 年轻代的内存使用在垃圾回收后下降了。(213,132K) 的年轻代对象被提升到老年代(Old)中。(629,119k)。 阅读详情

相关推荐

JAVA开发中GC日志打印简单通用的配置详解

生产环境上,或者其他要测试 GC 问题的环境上,一定会配置上打印GC日志的参数,便于分析 GC 相关的问题。 但是可能很多人配置的都不够“完美”,要么是打印的内容过少,要么是输出到控制台,要么是一个大文件被覆盖,要么是……

sakura的博客 2342

JVM之GC日志

GC日志有什么用 在Java中,GC日志能够帮助我们分析内存动态分配和垃圾回收,让我们有针对的对程序进行优化 如何查看GC日志 先准备一个案例程序 public class GCTest { public static void main(String[] args) { int i = 0; List<User> userList = new ArrayList<>(); while (true) {

qq_35597828的博客 3703

人类肠道微生物群落代谢建模

MICOMWeb 是款用户友好型网站,专为人类肠道微生物群落代谢建模设计。该网站旨在解决基因组尺度代谢模型(in silico)构建过程中的3大限制:① 使用 MICOM Python 包进行通量平衡分析时对用户 Python 编程知识的要求;② 支持预定义和用户自定义饮食,以生成专属代谢模型;③ 处理宏基因组鸟枪法测序或 16S 扩增子测序获得的真实丰度数据时,所需的高通量计算基础设施。本文展示了 MICOMWeb 的核心功能,用户可轻松开展虚拟实验,为3个已发表数据集的实验验证生成功能性假设。

多组・学・多组学 1171

JVM性能调优——GC日志分析

生成GC日志、Parallel垃圾收集器日志解析、G1垃圾收集器日志解析、CMS垃圾收集器日志解析、日志解析工具

码说芯语的博客 6032

8位可控加减法电路设计

一、设计要求   利用Logisim平台中现有运算部件构建一个8位可控加减法器,可支持八位加减法,利用已经封装全加器和逻辑门进行连接,要求实现相应的输出,判断是否溢出。 二、方案设计 实验原理: [A]补+[B]补 = [A+B]补(mod2^n+1)   公式1        [A-B]补 = [A]补+[-B]补(mod2^n+1)    公式2 FA为全加器,利用全加器实现加减法,难点在于实验减法,对输入的[Y]补各位取反加一即为[-Y]补,利用公式2,就可以将减法转化为加法再利用全加

qq_51700383的博客 1万+

别再手动算考勤了!教你用Python+企业微信API自动生成月度报表

本文介绍如何利用Python和企业微信API构建自动化考勤分析系统,实现从数据获取到可视化报表生成的全流程自动化。通过企业微信打卡接口获取数据,使用Pandas进行高效清洗和分析,并生成Excel和HTML格式的报表,大幅提升考勤统计效率。系统支持智能判定考勤状态,如迟到、早退等,并可通过定时任务实现月度自动化运行。

weixin_27875131的博客 290

JVM查看GC日志

一、如何打印出JVM GC日志 需要在系统的JVM参数中加入GC日志的打印选型,jvm参数如下所示: -XX:NewSize=5242880 -XX:MaxNewSize=5242880 -XX:InitialHeapSize=10485760 -XX:MaxHeapSize=10485760 -XX:SurvivorRatio=8 -XX:PretenureSizeThreshold=10485760 -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+Print

cristianoxm的博客 5700

用Python+NumPy手把手实现分数阶傅里叶变换(FRFT),搞定线性调频信号分析

本文详细介绍了如何使用Python和NumPy实现分数阶傅里叶变换(FRFT),特别针对线性调频信号(Chirp信号)分析。通过从零开始的代码实现和可视化案例,展示了FRFT在时变信号处理中的强大能力,帮助工程师和研究人员高效分析频率随时间变化的信号。

weixin_29062823的博客 218

JavaWeb源码运行时性能监控与问题定位:JVM参数调优、GC日志分析与CPU占用率排查实战

JavaWeb应用的性能监控与调优是一个系统工程,需要从JVM层、应用层、系统层多个维度进行综合考虑。JVM参数调优:合理配置内存区域和GC策略GC日志分析:通过日志分析定位内存问题CPU问题排查:从进程到线程的层层定位监控体系建设:构建全方位的监控平台性能优化不是一次性的工作,而需要建立常态化的监控机制和应急预案。只有将监控、预警、排查、优化形成闭环,才能确保线上系统的稳定高效运行。参考资料- Oracle官方JVM调优指南- 《Java性能权威指南》- 阿里云JVM参数优化白皮书。

2401_84496496的博客 451

Landsat9 地表温度反演方法

landsat9地表温度反演及缺失值处理方法

xiangliu12345的博客 3919

深入解析CAN2.0A与CAN2.0B协议:帧格式与通信机制对比

本文深入对比了CAN2.0A与CAN2.0B协议的核心差异,重点解析了11位标准帧与29位扩展帧的帧格式、标识符长度及通信机制。文章阐述了CAN2.0B向下兼容的特性,并探讨了在汽车电子、工业控制等复杂网络中,如何根据项目需求、兼容性及实时性要求,在标准帧与扩展帧之间做出合理选择。

weixin_29163797的博客 395

JVM 性能调优与线上问题定位方法论:从 GC 日志到根因分析的系统性实战

JVM 性能调优的方法论核心是"先定位根因,再对症下药"。GC 日志分析判断 GC 是否正常,线程 Dump 找到阻塞点,堆 Dump 追踪内存泄漏。三个工具组合使用,覆盖 90% 以上的 JVM 线上问题。调优不是调参数,而是理解系统行为。GC 频繁可能是堆太小,也可能是内存泄漏;CPU 飙高可能是计算密集,也可能是 GC 停顿。不同根因对应不同方案,搞反了只会越调越差。JVM 调优就像中医看病:望闻问切,先辨证再施治。不辨证就开药方,和蒙着眼睛拆盲盒没有区别。

dicky_zhang3的博客 4885

2023华为od机试C卷【最富裕的小家庭】C++ 实现

在一颗树中,每个节点代表一个家庭成员,节点的数字表示其个人的财富值,一个节点及其直接相连的子节点被定义为个小家庭。现给你一颗树,请计算出最富裕的小家庭的财富和。

MISAYAONE的博客 1239

JVM 性能调优:从内存模型到线上问题定位的系统方法论

JVM 性能调优的核心是建立从现象到根因的分析方法论,而非记住一堆参数。GC 日志分析定位 GC 问题,堆转储分析定位内存泄漏,线程栈分析定位 CPU 和锁问题。调优策略应基于数据而非直觉——先诊断,后治疗。G1 收集器适合 4-16GB 堆的中等规模应用,ZGC 适合大堆低延迟场景。JVM 调优的终极目标不是消除 GC,而是让 GC 的停顿时间在业务可接受范围内。

dicky_zhang3的博客 4401

北斗导航 | 从北一到北二再到北三,你应该知道的北斗导航系统

博主github:https://github.com/MichaelBeechan 博主优快云:https://blog.youkuaiyun.com/u011344545 一、引言 我国高度重视北斗系统的建设和发展。自20世纪80年代开始探索适合我们国家国情的卫星导航系统发展道路,形成了“三步走”的发展战略:2000年底,建成北斗一号导航系统,向我国广大用户提供服务;2012年底,建成北斗二号导航系统,...

尘世冰封的专栏 3080

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

JVM性能调优实战:GC日志分析与内存问题排查全攻略

GC日志分析是JVM性能调优的重要手段之一。通过合理配置GC日志、使用jstat/jmap等工具进行实时监控,并结合MAT等专业工具对Heap Dump进行深度分析,能够有效识别和解决内存泄漏、频繁GC、OOM等问题。掌握这些技能不仅能帮助你快速定位线上故障,还能提升你在Java性能优化领域的专业能力。

用文字记录技术,用分享回馈社区,用坚持见证成长 1542

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

如何通过分析GC日志来定位Java进程的内存问题?

GC 日志是排查 Java 内存问题的核心工具,通过分析日志可以了解堆内存使用模式、GC 频率、对象晋升规律等关键信息。通过系统分析 GC 日志,可以精准定位内存泄漏、对象分配不合理、收集器选择不当等问题,从而优化 JVM 配置,提升应用性能。

sre救赎之路 1618

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

GC 日志全解析:格式规范 + 问题分析 + 性能优化

GC日志格式:核心是「时间戳+标签+GC事件+内存变化+时长」,不同收集器的日志特征不同,但STW均以Pause + 时长标识;分析步骤:先定基准→统计频次/时长/占用率→结合日志特征定位问题(如频繁Full GC、STW超标);优化优先级:应用层(减少对象创建/排查泄漏)>JVM参数(调堆/线程数)>收集器选型;工具辅助:优先用GCEasy/GCViewer可视化分析,减少手动统计误差。

winfield821的博客 839

如何读懂Java GC日志

(1)“Heap before GC invocations=1 (full 0)”描述了发生了一次GC垃圾回收,“full 0”表示发生了0次Full GC,在之后描述了发生GC垃圾回收之前和之后年轻代区域(PSYoungGen)、eden区域(eden space)、From Survivor空间区域(from space)、To Survivor空间区域(to space)、年老代区域(ParOldGen)、元数据区域(Metaspace)、class space 的内存空间使用情况。

夏天又到了的专栏 2310

从GC日志小白到分析大神:GCEasy实战全攻略

本文系统介绍GCEasy工具在Java GC日志分析中的应用。针对传统手动分析GC日志效率低下的痛点,GCEasy通过自动解析、可视化展示和智能诊断,显著提升分析效率。文章详细讲解GCEasy的工作原理、环境搭建、基础使用方法和三个典型生产案例(YoungGC频繁、FullGC卡顿、吞吐量过低)的优化过程,并提供代码优化方案、JVM参数调整建议及ZGC升级方案。最后总结GC吞吐量优化逻辑、G1与ZGC适用场景对比以及GCEasy的核心分析流程,为Java性能优化提供实用指导。

果酱 の 博客 1085

解读GC日志中的各项指标

GC 日志是 JVM 性能调优的重要依据,不同垃圾收集器(如 CMS、G1、ZGC)的日志格式有所差异,但核心指标含义一致。通过深入理解 GC 日志中的各项指标,可以精准定位内存泄漏、对象分配不合理、收集器选择不当等问题,从而优化 JVM 配置,提升应用性能。

sre救赎之路 1165

搞java开发,看懂JVM的GC日志真的很重要

推荐阅读:蚂蚁三面被虐惨,原因竟是spring,jvm,mybatis,并发一窍不通 为面阿里P8,我肝了一份651个技术分支的脑图,要么?(限时领) 今天整理的这篇文章,整理自以前记录的日常笔记。 刚开始接触JVM时,对待GC的日志,是保持"逃避"态度的,线上部署的程序没有达到期望的运行效率,或是预期目标时,往往会把问题的矛头指向内存上。 是不是内存不够? GC日志怎么这么多?占用磁盘高达几个G? 不想看到打印怎么多,甚至暴力的将程序日志...

文章中资料均可获取,有需要请添加yunduoa2019即可 355

【Java开发300个实用技巧】102.GC日志分析GCEasy可视化

本文介绍了如何通过GCEasy工具快速分析GC日志,定位Java应用的性能瓶颈。文章分为五个主要模块:GC日志分析的核心价值、手把手生成GC日志、GCEasy实战六步法、高频性能问题解码以及可视化分析避坑指南。每个模块详细讲解了如何配置JVM参数、生成规范的GC日志、使用GCEasy进行可视化分析,以及如何识别和解决常见的内存泄漏、STW时间过长等问题。通过实际案例和配置示例,文章帮助开发者快速掌握GC日志分析的技巧,避免常见错误,提升Java应用的性能。

924

JVM 性能调优与线上问题定位:性能数据到底该怎么看

性能数据到底该怎么看”首先要落到可观察、可回滚的工程动作上。本文从配置、调用链和运行指标三个层面梳理判断方法,重点说明应先收集什么证据、怎样做小范围验证,以及何时应停止扩张改动。

dicky_zhang3的博客 5033

分析 java gc日志_Java gc日志分析

性能测试排查定位问题,分析调优过程中,会遇到要分析gc日志,人肉分析gc日志有时比较困难,相关图形化或命令行工具可以有效地帮助辅助分析。Gc日志参数通过在tomcat启动脚本中添加相关参数生成gc日志-verbose.gc开关可显示GC的操作内容。打开它,可以显示最忙和最空闲收集行为发生的时间、收集前后的内存大小、收集需要的时间等。打开-xx:+ printGCdetails开关,可以详细了解GC...

weixin_29380121的博客 743

JVM性能调优技巧

本文是基于JDK8设置的JVM参数。

xujinwei_gingko的专栏 818
上一篇: Java 为什么不支持多继承?
下一篇: Spring Boot 项目中如何区分是数据库瓶颈还是应用代码瓶颈?
冰糖心书房
博客等级 码龄15年 6017粉丝 690原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰糖心书房

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值