GC日志包括哪些内容?

GC日志是指Java虚拟机在垃圾回收过程中产生的记录。它可以用于分析应用程序的性能问题和内存泄漏等方面。GC日志包括哪些内容主要包括以下几个方面:

  1. GC类型和阶段

GC日志中会记录每个GC类型的具体信息,例如Full GC和Young GC,同时还会记录GC的阶段,包括Mark和Sweep等。

例如:Young GC 日志信息:

[GC (Allocation Failure) [PSYoungGen: 33792K->5120K(38400K)] 33792K->16008K(125952K), 0.0056151 secs] [Times: user=0.01 sys=0.00, real=0.01 secs]
  1. GC发生的原因

GC日志中还会记录GC发生的原因,例如Allocation Failure、System.gc()、JVM调用gc等。

例如:Allocation Failure 日志信息:

[GC (Allocation Failure) [PSYoungGen: 33792K->5120K(38400K)] 33792K->16008K(125952K), 0.0056151 secs] [Times: user=0.01 sys=0.00, real=0.01 secs]
  1. 内存变化情况

GC日志中包括内存的变化情况,包括每个内存区域的使用情况以及整个堆内存的使用情况。

例如:Young GC 日志信息:

[GC (Allocation Failure) [PSYoungGen: 33792K->5120K(38400K)] 33792K->16008K(125952K), 0.0056151 secs] [Times: user=0.01 sys=0.00, real=0.01 secs]

其中 [PSYoungGen: 33792K->5120K(38400K)] 是指Young Generation的使用情况,它的使用量从33792K减少到5120K,它的总大小为38400K; 33792K->16008K(125952K) 是指整个堆内存的使用情况,它的使用量从33792K增加到16008K,它的总大小为125952K。

  1. 时间情况

GC日志中还会记录执行GC所花费的时间以及相关的系统时间。

例如:Young GC 日志信息:

[GC (Allocation Failure) [PSYoungGen: 33792K->5120K(38400K)] 33792K->16008K(125952K), 0.0056151 secs] [Times: user=0.01 sys=0.00, real=0.01 secs]

其中 Times: user=0.01 sys=0.00, real=0.01 secs 是指GC的时间,它分别花费了0.01秒的用户时间、0秒的系统时间以及0.01秒的实际时间。

示例1:

在JVM启动参数中加入如下参数,可以打印GC日志:

-verbose:gc

打印出来的GC日志如下所示:

[GC (Allocation Failure) [PSYoungGen: 33792K->5120K(38400K)] 33792K->16008K(125952K), 0.0056151 secs] [Times: user=0.01 sys=0.00, real=0.01 secs]
[GC (Allocation Failure) [PSYoungGen: 5120K->0K(38400K)] 16008K->16008K(125952K), 0.0081530 secs] [Times: user=0.02 sys=0.00, real=0.01 secs]
[Full GC (Ergonomics) [PSYoungGen: 0K->0K(38400K)] [ParOldGen: 110316K->40199K(87552K)] 110316K->40199K(125952K), [Metaspace: 2825K->2825K(1056768K)], 0.0240453 secs] [Times: user=0.01 sys=0.01, real=0.03 secs]
[GC (Allocation Failure) [PSYoungGen: 34816K->5120K(38400K)] 75015K->69135K(125952K), 0.0125119 secs] [Times: user=0.00 sys=0.01, real=0.01 secs]
[GC (Allocation Failure) [PSYoungGen: 39936K->5126K(38400K)] 120495K->116970K(125952K), 0.0168332 secs] [Times: user=0.01 sys=0.01, real=0.02 secs]

示例2:

在JVM启动参数中加入如下参数,可以打印详细的GC日志:

-XX:+PrintGCDetails

打印出来的GC日志如下所示:

[GC (Allocation Failure) [PSYoungGen: 33792K->5120K(38400K)] 33792K->16008K(125952K), 0.0056151 secs] [Times: user=0.01 sys=0.00, real=0.01 secs]
[Full GC (Ergonomics) [PSYoungGen: 5120K->0K(38400K)] [ParOldGen: 10888K->16343K(87552K)] 16008K->16343K(125952K), [Metaspace: 2825K->2825K(1056768K)], 0.0147972 secs] [Times: user=0.00 sys=0.00, real=0.01 secs]
[GC (Allocation Failure) [PSYoungGen: 34816K->5120K(38400K)] 69135K->80413K(125952K), 0.0118978 secs] [Times: user=0.01 sys=0.00, real=0.02 secs]
[Full GC (Ergonomics) [PSYoungGen: 5120K->0K(38400K)] [ParOldGen: 75394K->42796K(87552K)] 80515K->42796K(125952K), [Metaspace: 2825K->2825K(1056768K)], 0.0211472 secs] [Times: user=0.01 sys=0.01, real=0.02 secs]

以上两个示例演示了如何打印GC日志,并说明了GC日志包括的内容及其含义,对于多数的性能问题和内存泄漏问题,分析GC日志是非常有用的。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:GC日志包括哪些内容? - Python技术站

(0)
上一篇 2023年5月10日
下一篇 2023年5月10日

相关文章

  • SpringBoot整合java诊断工具Arthas解读

    SpringBoot整合java诊断工具Arthas解读 简介 Arthas是一款阿里开源的Java诊断工具,它可以帮助开发者找到应用运行过程中的问题,定位性能瓶颈,进行动态代码修改等。本攻略将介绍如何在SpringBoot项目中使用Arthas进行诊断调试。 步骤 1. 导入依赖 在SpringBoot项目的pom.xml中添加arthas依赖,如下所示:…

    Java 2023年5月19日
    00
  • 使用Nexus搭建Maven私服的方法步骤

    使用Nexus搭建Maven私服可以帮助团队内部或者企业方便地管理Maven依赖,提高构建的可重复性和稳定性。下面我将为大家详细讲解使用Nexus搭建Maven私服的方法步骤: 一、环境要求 在安装和配置Nexus之前,确保已满足以下要求: Java 8或更高版本已安装并配置好JAVA_HOME环境变量。 为Nexus指定一个非root用户。 shell s…

    Java 2023年5月20日
    00
  • Spring入门实战之Profile详解

    以下是 “Spring入门实战之Profile详解”的完整攻略: 什么是 Spring Profile Spring是一个非常流行的 JavaEE 框架,它提供了许多元数据、配置和依赖注入等功能,便于我们快速构建应用程序。Spring Profile 是 Spring 框架中一项非常有用的功能。它可以用于定义可重用的配置、属性文件、JavaBean、组件等,…

    Java 2023年5月19日
    00
  • 谈谈JavaScript自定义回调函数

    谈谈JavaScript自定义回调函数 什么是回调函数? 回调函数是一种特殊的函数,它作为参数传递给另一个函数并且在主函数执行完成后被调用。通常情况下,回调函数用于处理异步操作。比如,当一个网络请求完成时,需要回调函数来处理返回的数据。 JavaScript自定义回调函数的基本用法 在JavaScript中,我们可以通过自定义函数来实现回调函数的功能。下面是…

    Java 2023年6月15日
    00
  • Java实现考试系统

    Java实现考试系统攻略 概述 本文介绍如何使用Java实现一个考试系统。该系统包含了以下功能: 单选题和多选题的创建和管理 考试试卷生成和管理 学生考试、交卷和阅卷 系统设计 数据库设计 考试系统需要存储题目、试卷和学生等信息。因此需要设计以下表格: question 表:用于存储题目信息,包括题目内容、选项和正确答案等。 exam 表:用于存储试卷信息,…

    Java 2023年5月19日
    00
  • c#使用S22.Imap收剑灵激活码邮件代码示例(imap收邮件)

    c#是一种广泛应用于Windows平台开发的高级编程语言,S22.Imap是一个.NET实现的轻量级IMAP客户端,用于与IMAP邮件服务器进行交互操作。本文将详细讲解如何使用S22.Imap收取邮件,特别是在收取剑灵激活码邮件时的注意事项及代码示例。 收取剑灵激活码邮件的注意事项 剑灵是由韩国NCSoft开发的一款热门游戏,激活码是该游戏玩家兑换游戏物品的…

    Java 2023年5月19日
    00
  • 详解java中String值为空字符串与null的判断方法

    下面是详细讲解“详解java中String值为空字符串与null的判断方法”的攻略: 背景介绍 在Java中,有时需要判断一个字符串变量的值是否为空。但是,空值并不仅指null。在某些情况下,空值还包括空字符串,即“”(包含零个字符的字符串)。这时就需要使用不同的方法来进行判断了。 判断字符串值是否为空字符串 在Java中判断一个字符串是否为空字符串时,我们…

    Java 2023年5月27日
    00
  • RedisTemplate访问Redis的更好方法

    让我来详细讲解RedisTemplate访问Redis的更好方法的完整攻略。 RedisTemplate介绍 RedisTemplate是一个封装了Jedis库的Spring框架的Redis操作工具类,使用它可以更方便、更快速、更安全地对Redis进行读写。 如何使用RedisTemplate 使用RedisTemplate操作Redis,需要先创建一个Re…

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