什么是GC日志?

GC日志是指GC(Garbage Collection,垃圾回收)的记录日志,主要用于排查JVM内存问题和性能调优。在GC发生时,JVM会记录下当前内存使用情况、GC时间、GC原因、GC类型、GC前后各个内存区域的使用情况等信息,并输出到GC日志中。

常见的GC日志有以下几种格式:

  1. -Xloggc:filename [可简写为 -verbose:gc,从JDK 9开始不再支持],以输出文件方式记录GC日志。

    例如:java -Xloggc:/home/user/gc.log -jar myapp.jar

这条命令会将GC日志输出到/home/user/gc.log文件中。

  1. -XX:+PrintGC 和 -XX:+PrintGCDetails,以输出到标准输出流方式记录GC日志。

    例如:java -XX:+PrintGC -XX:+PrintGCDetails -jar myapp.jar

这条命令会将GC日志输出到控制台。

另外,还有一些其他的GC日志参数,如-XX:+PrintGCDateStamps、-XX:+PrintGCTimeStamps、-XX:+PrintHeapAtGC等,可以根据需要进行使用。

下面是两个GC日志示例:

  1. 短时间间隔内多次Young GC的日志:
[GC (Allocation Failure) [PSYoungGen: 59905K->8704K(68608K)]
 59905K->18005K(220160K), 0.0132214 secs] 
[Times: user=0.02 sys=0.01, real=0.01 secs] 
[GC (Allocation Failure) [PSYoungGen: 68608K->8704K(68608K)]
 77909K->35012K(220160K), 0.0142372 secs] 
[Times: user=0.03 sys=0.01, real=0.01 secs] 

以上日志中,发生了两次Young GC,原因是分配内存失败。每次Young GC后,PSYoungGen内存从59905K、68608K分别降到了8704K,分别为内存使用情况、内存空间总大小、Young GC后整个堆内存的使用情况、堆内存总大小。两次GC中,整个堆内存的使用情况分别从59905K、77909K增加到了18005K、35012K,整个Young GC的耗时分别为0.0132214s、0.0142372s。

  1. Full GC的日志:
[Full GC (System.gc()) [PSYoungGen: 4128K->0K(6144K)] 
[ParOldGen: 27007K->16943K(34944K)] 31135K->16943K(41088K), [Metaspace: 266K->266K(1056768K)], 0.0362059 secs] 
[Times: user=0.10 sys=0.01, real=0.03 secs] 

以上日志中,发生了一次Full GC,原因是手动调用了System.gc()。在此次GC中,Young Gen完全被清空,Old Gen恢复了一部分内存,整个堆内存从31135K缩减到了16943K。Metaspace没有任何变化。此次GC的耗时为0.0362059s,其中,user=0.10秒代表用户态CPU的消耗时间,sys=0.01秒代表内核态CPU的消耗时间,real=0.03代表实际花费的时间。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:什么是GC日志? - Python技术站

(1)
上一篇 2023年5月11日
下一篇 2023年5月11日

相关文章

  • Java的Struts框架报错“NullSubscriptionException”的原因与解决办法

    当使用Java的Struts框架时,可能会遇到“NullSubscriptionException”错误。这个错误通常由以下原因之一起: 配置错误:如果配置文件中没有正确配置,则可能会出现此错误。在这种情况下,需要检查文件以解决此问题。 订阅名称:如果订阅名称不正确,则可能出现此错误。在这种情况下,需要检查订阅名称以解决此问题。 以下是两个实例: 例 1 如…

    Java 2023年5月5日
    00
  • Java 格式化输出JSON字符串的2种实现操作

    接下来我将详细讲解“Java 格式化输出JSON字符串的2种实现操作”的完整攻略。 1. JSON格式化输出实现方式 在Java中格式化输出JSON字符串有很多种方式,这里将介绍最常用的两种方式:第一种是使用JSON API手动创建JSON字符串,第二种是使用Jackson、Gson等库自动序列化为JSON字符串。 1.1 使用JSON API手动创建JSO…

    Java 2023年5月26日
    00
  • java LinkedList类详解及实例代码

    Java LinkedList 类详解及实例代码 介绍 Java中的LinkedList类是一个双向链表的实现,是List接口的有序集合。LinkedList类提供了方便的操作链表的方法,可以很容易地实现添加、删除、插入以及访问节点等操作。 以下是创建一个LinkedList的示例: LinkedList<String> linkedList =…

    Java 2023年5月23日
    00
  • java短网址服务(TinyURL)生成算法

    Java短链接服务(TinyURL)是一种将长链接转换为短链接的算法方法,常用于缩短URL长度,方便用户分享和保存网址。下面是Java短链接服务的完整攻略。 1.将长链接转换为短链接的算法 Java短链接服务的核心是将长链接转换为短链接,其具体算法步骤如下: 1.1 首先生成长链接的哈希码。 1.2 将哈希码分为4段,每段5位。 1.3 将这些5位哈希码转换…

    Java 2023年5月19日
    00
  • java必学必会之线程(2)

    Java必学必会之线程(2)攻略 线程同步 在多线程编程中,线程同步是一个非常重要的问题。如果不加以控制,在多线程同时访问共享资源的情况下,可能会导致数据不一致、死锁等问题。 同步的两种方式 Java 中实现同步的两种方式分别是 synchronized 和 ReentrantLock。 synchronized 关键字是 Java 提供的默认的语言级别的同…

    Java 2023年5月30日
    00
  • 浅谈hibernate中懒加载禁用操作

    浅谈Hibernate中懒加载禁用操作 什么是懒加载 Hibernate中的懒加载指的是对象的延迟加载,在对象被使用时才进行加载操作,目的是为了提高系统的性能。 在默认情况下,Hibernate使用懒加载来查询和加载与主对象相关的所有集合关系和属性。因此,在需要使用这些集合和属性时,才会进行加载操作,减少了对数据库的查询次数,提高了系统性能。 为什么需要禁用…

    Java 2023年5月31日
    00
  • Jsp敏感词过滤的示例代码

    下面是关于 “JSP敏感词过滤的示例代码” 的完整攻略: 1. 什么是敏感词过滤? 在网站开发中,为了防止用户输入敏感词汇或者不良言论,常常需要对用户输入的内容进行敏感词过滤。敏感词过滤主要是通过程序对用户输入内容进行检查,然后对其中的敏感词进行替换或者屏蔽处理,从而保证网站的安全性和健康性。 2. 如何在JSP中实现敏感词过滤? JSP虽然不是一个专门用来…

    Java 2023年6月15日
    00
  • Java实战之简单的文件管理器

    Java实战之简单的文件管理器 概述 本篇攻略将介绍如何使用Java编写一个简单的文件管理器,主要实现以下功能: 显示指定目录下的文件和子目录 创建新目录 创建新文件 复制文件 移动文件 删除文件 开始 1. 建立项目 使用Eclipse或者IntelliJ IDEA等开发工具,建立一个新的Java项目。 2. 创建主类 创建一个名为FileManager的…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部