首先我们来介绍什么事GC:
Java GC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与C++/C的主要区别之一,作为Java开发者,一般不需要专门编写内存回收和垃圾清理代码,对内存泄露和溢出的问题,也不需要像C程序员那样战战兢兢。这是因为在Java虚拟机中,存在自动内存管理和垃圾清扫机制。概括地说,该机制对JVM(Java Virtual Machine)中的内存进行标记,并确定哪些内存需要回收,根据一定的回收策略,自动的回收内存,永不停息(Nerver Stop)的保证JVM中的内存空间,防止出现内存泄露和溢出问题。
在Java语言出现之前,就有GC机制的存在,如Lisp语言),Java GC机制已经日臻完善,几乎可以自动的为我们做绝大多数的事情。然而,如果我们从事较大型的应用软件开发,曾经出现过内存优化的需求,就必定要研究Java GC机制。
我们如何获取GC日志:
一种是使用命令动态查看,
17997 就是所谓的pid ,应用进程的id。
也可以设置间隔固定时间来打印:
每隔2000ms输出1262的gc情况,一共输出20次。
一种是在容器中设置相关参数打印GC日志。
JVM的GC日志的参数设置如下:
-----XX:+PrintGC
输出GC日志
------XX:+PrintGCDetails
输出GC的详细日志
------XX:+PrintGCTimeStamps
输出GC的时间戳
------XX:+PrintGCDateStamps
输出GC的时间戳
------XX:+PrintHeapAtGC
在进行GC的前后打印出堆的信息
------Xloggc:../logs/gc.log
日志文件的输出路径
接下来我们来分析gc日志Young GC回收日志:
2016-07-05T10:43:18.093+0800: 25.395: [GC [PSYoungGen: 274931K->10738K(274944K)] 371093K->147186K(450048K), 0.0668480 secs] [Times: user=0.17 sys=0.08, real=0.07 secs]
Full GC回收日志:
10738K->0K(274944K)] [ParOldGen: 136447K->140379K(302592K)] 147186K->140379K(577536K) [PSPermGen: 85411K->85376K(171008K)], 0.6763541 secs] [Times: user=1.75 sys=0.02, real=0.68 secs]
通过上面日志分析得出,PSYoungGen、ParOldGen、PSPermGen属于Parallel收集器。其中PSYoungGen表示gc回收前后年轻代的内存变化;ParOldGen表示gc回收前后老年代的内存变化;PSPermGen表示gc回收前后永久区的内存变化。young gc 主要是针对年轻代进行内存回收比较频繁,耗时短;full gc 会对整个堆内存进行回城,耗时长,因此一般尽量减少full gc的次数
通过两张图来解析gc日志构成:
Young GC日志:
Full GC日志:
相关推荐
2. **GC日志分析**:通过分析GC日志,了解GC行为,找出性能瓶颈。 3. **并行与并发设置**:调整并行GC线程数和并发GC策略,优化性能。 4. **对象存活率预估**:通过调整Survivor区比例,减少Full GC的发生。 5. **...
5. **GC调优**:包括如何分析GC日志,理解GC停顿(Stop-the-World)事件,以及如何通过调整JVM参数来改善系统性能,如设置堆大小、新生代与老年代的比例、存活代的晋升策略等。 6. **性能监控与诊断工具**:如...
3. **监控与诊断**:使用JVisualVM、JConsole、JFR等工具进行实时监控,分析GC日志,找出性能瓶颈。 4. **对象生命周期管理**:优化对象创建和销毁,减少短生命周期对象进入老年代,降低Full GC的发生。 5. **类...
调优主要涉及选择合适的垃圾收集器,调整堆大小和新生代比例,以及设置GC日志,通过监控GC行为来优化性能。 总结,理解并掌握JVM参数和GC机制是Java开发中的重要技能。通过合理配置JVM参数,我们可以有效控制内存...
- **详细的GC日志**:IBM JVM支持输出详细的GC日志信息,帮助开发者监控和调试GC行为。 - GC日志可以包括从`System.gc()`调用触发的收集、分配失败时的收集、堆扩展或收缩时的收集等信息。 #### 六、消息与命令行...
### Sun Hotspot V1.6.0 JVM GC详解 #### 一、JVM结构与GC基础知识 ##### 1.1 JVM内存结构概述 Java虚拟机(JVM)内存主要分为以下几个部分: - **程序计数器(PC Register)**:记录当前线程所执行的字节码指令...
学习这份资料,你将了解如何调整JVM参数以优化性能,如何解决内存溢出问题,以及如何分析和理解GC日志,从而更好地应对大规模并发场景下的挑战。 总的来说,理解和掌握JVM的工作原理对于Java开发者来说至关重要,它...
GC(Garbage Collection)是JVM自动管理内存的过程,通过打印GC日志,我们可以追踪GC的行为,找出可能存在的问题。在JVM启动时,添加适当的参数如`-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+...
4. **监控和诊断GC**:使用JMX、VisualVM等工具进行GC日志分析,了解GC行为,找出性能瓶颈。 5. **使用对象池**:对于生命周期短、创建频繁的对象,使用对象池可以减少GC压力。 6. **避免大量短生命周期的大对象**...
GC日志是分析JVM性能的关键工具。通过配置JVM参数,例如 `-XX:+PrintGCDetails`、`-XX:+PrintGCTimeStamps` 和 `-XX:+PrintGCDateStamps`,可以记录详细的GC事件。这些日志包含了GC执行的时间、类型(如Full GC、...
8. **GC日志分析**:通过开启GC日志 (`-XX:+PrintGCDetails`),可以详细记录每次垃圾收集的情况,从而分析垃圾收集的频率和耗时,找到优化空间。 总之,Monkey老师的JVM调优课程涵盖了JVM的各个方面,旨在帮助...
在问题排查时,可以使用`jmap -heap [pid]`等工具监控内存状态,以及`-XX:+PrintGCDetails`等选项输出GC日志,以便分析和优化。 总结来说,理解JDK 1.6的GC机制对于优化Java应用程序的性能至关重要。通过了解内存...
总结来说,GChisto是一款强大的GC日志分析工具,它通过解析和可视化JVM的GC日志,帮助开发者和运维人员找出内存管理的问题,特别是Old Generation区域的问题,从而提升Java应用的性能和稳定性。正确使用GChisto,并...
在Java中,通过设置JVM参数,我们可以开启GC日志功能,记录每一次垃圾回收的详细信息。例如,我们可以在启动Java应用时添加以下参数: ``` -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:gc.log ``` 这将使...
- **GC日志分析**:GC日志记录了垃圾收集器的行为信息,通过分析这些日志,可以深入了解GC过程,为进一步调优提供依据。 综上所述,合理配置JVM参数、选择合适的垃圾收集器以及有效地利用工具进行分析,对于提高...
### Java Virtual Machine (JVM) 详析 #### 一、Java相关 ...- `-XX:+PrintGCDetails`:打印详细的垃圾收集日志。 通过深入理解这些概念和技术细节,开发者可以更好地管理和优化 Java 应用程序的性能。
4. **-XX:+PrintGCTimeStamps**: 在GC日志中添加时间戳,便于分析GC发生的频率和持续时间。 5. **-XX:+PrintHeapAtGC**: 在每次GC后打印堆内存使用情况。 6. **-XX:+UseParNewGC**: 使用ParNew收集器作为年轻代...
- **作用**:此参数用于指定GC日志的输出位置,便于后续对日志文件进行分析。 - **示例输出**:该参数本身不直接输出信息,而是指定了日志文件的路径,如“log/gc.log”。 #### 三、堆的分配参数 ##### -Xms 和 -...