简直不可思议,竟然还有人不会查看GC垃圾回收日志?

我求求你了,GC日志打印别再瞎配置了 生产环境上,或者其他要测试 GC 问题的环境上,一定会配置上打印GC日志的参数,便于分析 GC 相关的问题。 但是可能很多人配置得都不够“完美”,要么是打印的内容过少,要么是输出到控制台,要么是一个大文件被覆盖,要么是…… 本文带你一步一步,配置一个完美的 GC 日志打印策略 打印内容 为了保留足够多的“现场证据”,最好是把 GC 相关的信息打印的足够完整。而且你的程序真的不差你GC时打印日志I/O消耗的那点性能 打印基本 GC 信息 打印 GC 日志的第一步,就是开启 GC 打印的参数了,也是 阅读详情

日志的重要性,不需要过多强调了。通过日志,我们可以发现程序可能有内存(泄露)问题。本文从案例出发,具体介绍这些日志信息,以期帮助大家更好地了解垃圾回收的运行情况。

还是先上图,看看本文的主要内容:

简直不可思议,竟然还有人不会查看GC垃圾回收日志?

 

我们先来看个案例,代码如下:

/** * 打印垃圾回收日志案例 * 参数设置: -XX:+PrintGCDetails * @author 田维常 * @version 1.0 * @date 2020/11/9 8:22 */public class PrintGCDetailsDemo {    public static void main(String[] args) {        System.out.println("Hello world");    }}

启动参数设置:

XX:+PrintGCDetails

运行main方法,输出

Hello world
Heap
 PSYoungGen      total 38400K, used 4670K [0x00000000d5f00000, 0x00000000d8980000, 0x0000000100000000)
  eden space 33280K, 14% used [0x00000000d5f00000,0x00000000d638fb98,0x00000000d7f80000)
  from space 5120K, 0% used [0x00000000d8480000,0x00000000d8480000,0x00000000d8980000)
  to   space 5120K, 0% used [0x00000000d7f80000,0x00000000d7f80000,0x00000000d8480000)
 ParOldGen       total 87552K, used 0K [0x0000000081c00000, 0x0000000087180000, 0x00000000d5f00000)
  object space 87552K, 0% used [0x0000000081c00000,0x0000000081c00000,0x0000000087180000)
 Metaspace       used 3525K, capacity 4498K, committed 4864K, reserved 1056768K
  class space    used 388K, capacity 390K, committed 512K, reserved 1048576K

关于GC日志的参数

-XX:+PrintGC 输出GC日志
-XX:+PrintGCDetails 输出GC的详细日志
-XX:+PrintGCTimeStamps 输出GC的时间戳(以基准时间的形式)
-XX:+PrintGCDateStamps 输出GC的时间戳(以日期的形式,如 2013-05-04T21:53:59.234+0800)
-XX:+PrintHeapAtGC 在进行GC的前后打印出堆的信息
-Xloggc:../logs/gc.log 日志文件的输出路径

参数案例

-XX:+PrintGCDetails -XX:-UseAdaptiveSizePolicy -XX:SurvivorRatio=8 -XX:NewSize=10M -XX:MaxNewSize=10M

参数解释:

-XX:+PrintGCDetails 启用日志

-XX:-UseAdaptiveSizePolicy 禁用动态调整,使SurvivorRatio可以起作用

-XX:SurvivorRatio=8设置Eden:Survivior=8:1

-XX:NewSize=10M -XX:MaxNewSize=10M设置整个新生代的大小为10M

写了一个Spring Boot项目,非常简单的项目,里面写了一个controller

package com.tian.my_code.controller; import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList;import java.util.List; /** * @author 田维常 * @version 1.0 * @date 2020/11/8 15:46 */@RestControllerpublic class GCController {     List<Object> strings = new ArrayList<>();     @GetMapping("/gc")    public String addObject() {        System.out.println("-------gc-------");        for (int i = 0; i < 1000000; i++){            try {                Thread.sleep(20);            } catch (InterruptedException e) {                e.printStackTrace();            }            int [] a=new int[500000];            strings.add(a);        }        return "ok";    }}

这段代码其实是想后面演示OOM用的,都行吧,这里先用他来看看GC垃圾回收日志。

在IDEA中设置

简直不可思议,竟然还有人不会查看GC垃圾回收日志?

 

输出结果

简直不可思议,竟然还有人不会查看GC垃圾回收日志?

 

抓出一段来聊聊

GC (minor )日志

[GC (Allocation Failure) [PSYoungGen: 8525K->352K(9216K)] 98695K->98486K(130048K), 0.0092873 secs] [Times: user=0.00 sys=0.00, real=0.01 secs] 

(Allocation Failure):表明本次引起GC的原因是因为在年轻代中没有足够的空间能够存储新的数据了。

PSYoungGen:表示是GC类型

8525K:YoungGC前新生代内存占用

352K:YoungGC新生代内存占用

9216K:新生代总共大小

98695K:YoungGC前JVM内存占用

98486K:YoungGC后JVM内存使用

130048K:JVM堆总大小

0.0092873 secs:YoungGC耗时

user=0.00:YoungGC用户耗时

sys=0.00:YoungGC系统耗时

real=0.01:YoungGC实际耗时(这里居然四舍五入了)

Full GC 日志

[Full GC (Ergonomics) [PSYoungGen: 8051K->7817K(9216K)] [ParOldGen: 244969K->244969K(245760K)] 253020K->252786K(254976K), [Metaspace: 29386K->29386K(1077248K)], 0.0525381 secs] [Times: user=0.13 sys=0.00, real=0.05 secs] 

PSYoungGen: 8051K->7817K(9216K):新生代区GC前后和总大小

ParOldGen: 244969K->244969K(245760K):老年代GC前后和大小。

253020K->252786K(254976K):GC前后内存占用情况。

Metaspace: 29386K->29386K(1077248K):元空间GC前后和总大小

后面那几项和上面一样

GC垃圾回收日志就是这么简单么~蓝(nan)不蓝(nan)?

Java 垃圾回收(GC)机制与算法详解 垃圾回收(Garbage Collection,GC)是 Java 自动内存管理的核心机制,负责。,避免内存泄漏和手动内存管理的复杂性。理解 GC 机制是 Java 性能优化的关键一步!整理阶段: 存活对象向一端移动。标记阶段: 标记所有可达对象。清除阶段: 回收未标记对象。存活对象复制到另一块。 阅读详情

相关推荐

鸿蒙OpenHarmony【GC垃圾回收】 ArkTS运行

ArkTS运行时是OpenHarmony上应用默认语言运行时,运行着ArkTS、TS、JS语言的字节码和相关标准库,支持解释器、AOT和JIT高效执行方式,并提供完善的跨语言调用接口实现[Node-API],支持多语言混合开发。

adsjgfjha123123的博客 919

SpringBoot 生产环境部署,jar 启动配置 GC 命令

SpringBoot应用启动脚本配置

1766

IDEA如何查看GC日志以及含义

1IDEA运行程序如何查看GC日志 首先点击IDEA右上角这个位置 然后点击第一个 2.含义 下面是我的IDEA测试的时候打印出来的GC日志 [GC (Allocation Failure) [PSYoungGen: 33280K-&gt;5112K(38400K)] 33280K-&gt;30861K(125952K), 0.1152444 secs] [Times: user=0.25 s...

qq_30055391的博客 4385

JVM GC日志简介和垃圾收集算法

JVM GC日志简介和垃圾收集算法

Charge8的博客 554

鸿蒙开发基础 —— GC垃圾回收

在应用性能敏感场景,通过将js线程(SmartGC对worker线程和taskpool线程不生效)GC触发水线临时调整到js堆最大值(js线程默认448MB),尽量避免触发GC导致应用掉帧。如果敏感场景持续时间过久,对象分配已经达到了堆最大值,则还是会触发GC,且这次GC由于积累的对象太多,GC时间会相对较久。

guangxishaoji的博客 976

JVM 三 垃圾回收(GC)调优

是指通过配置垃圾回收器(GC)参数、优化堆内存分配、调整GC策略等手段来减少垃圾回收的停顿时间、提高吞吐量,并保证应用在高负载下的稳定性和性能。Java 中的垃圾回收机制非常重要,尤其是在高并发、大数据场景中,合理的垃圾回收策略能够显著提升系统的响应速度和处理能力。Java的垃圾回收机制主要用于自动管理堆内存,回收不再使用的对象。垃圾回收器会周期性地扫描堆内存,标记并清除不可达的对象,从而释放内存。JVM 提供了多种垃圾回收器,可以根据具体需求选择合适的 GC。

空 1050

Java虚拟机详解03----常用JVM配置参数

  【声明】  欢迎转载,但请保留文章原始出处→_→  生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4736162.html   本文主要内容: Trace跟踪参数 堆的分配参数 栈的分配参数   零、在IDE的...

weixin_34302798的博客 434

VMware player桥接模式不能联网的解决方法

VMware虚拟机下主要使用两种网络连接方式:桥接模式、NAT模式。 桥接模式:查一下,虚拟机独立IP。 NAT模式:与电脑共享IP、需要映射应用服务的端口。 我的需求需要独立IP,于是使用桥接。 网络连接失败。 个人主机系统的网络设置: 设置 - 网络和 Internet - 更改适配器设置 给虚拟机设置网络适配器 只保留,点击确定,确定。 重新运行虚拟机。 ...

Mark_md的博客 9450

JVM性能——开启回收日志和实时查看GC信息

如何开启GC日志和分析日志

大风的博客 7104

ISCC练习题MISC

解题技巧:看最后括号应该是IceCTF,先用了一键解码啥也没有啊,不对不对!好像是字符频率统计,转换网站:http://quipqiup.com/有人给你发了一串信息,你能解开吗?

m0_62737381的博客 1121

通俗解析:霍尔编码器、光电编码器、电位计、磁编码器和旋转变压器的实战选型指南

本文深入解析了霍尔编码器、光电编码器、电位计、磁编码器和旋转变压器五大主流编码器的工作原理与核心特性。通过对比精度、环境耐受性、成本及寿命等关键维度,并结合消费电子、工业自动化、汽车电子及极端环境等典型应用场景,提供了一份清晰的实战选型指南,旨在帮助工程师根据具体需求,在性能、可靠性与成本间做出最优决策。

weixin_29216353的博客 254

不可思议,竟然还有人不会查看GC垃圾回收日志?

关注“Java后端技术全栈”回复“面试”获取全套面试资料日志的重要性,不需要过多强调了。通过日志,我们可以发现程序可能有内存(泄露)问题。本文从案例出发,具体介绍这些日志信息,以期帮助大...

田维常 1668

告别误唤醒!S32K3xx低功耗设计避坑指南:Fast Standby模式与WISR寄存器操作详解

本文深入解析了NXP S32K3xx系列MCU在低功耗设计中常见的误唤醒问题,并提供了基于Fast Standby模式的解决方案。文章重点剖析了DCMRWF5寄存器的配置方法、WISR/WISR_64唤醒中断状态寄存器的标志位处理策略,以及如何利用32KB Standby SRAM保存唤醒状态,从而帮助开发者构建稳定可靠的汽车电子低功耗系统。

weixin_29163857的博客 365

idea本地跑如何看gc日志_不可思议,竟然还有人不会查看GC垃圾回收日志?

日志的重要性,不需要过多强调了。通过日志,我们可以发现程序可能有内存(泄露)问题。本文从案例出发,具体介绍这些日志信息,以期帮助大家更好地了解垃圾回收的运行情况。还是先上图,看看本文的主要内容:我们先来看个案例,代码如下:/***打印垃圾回收日志案例*参数设置:-XX:+PrintGCDetails*@author田维常*@version1.0*@date2020/11/98:...

weixin_28221501的博客 838

Android实现自动输入文本效果 (附完整源码)

Android实现自动输入文本效果 (附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 416

基于注意力机制的行人重识别(Reld)模型论文解读----Relation-Aware Global Attention for Person Re-identification

任务概述:在多摄像头的复杂场景中,快速定位查找指定目标的所有结果。

qq_52053775的博客 1895

简直不可思议,竟还有人不会查看GC垃圾回收日志?

日志的重要性,不需要过多强调了。通过日志,我们可以发现程序可能有内存(泄露)问题。本文从案例出发,具体介绍这些日志信息,以期帮助大家更好地了解垃圾回收的运行情况。 还是先上图,看看本文的主要内容: 我们先来看个案例,代码如下: /***打印垃圾回收日志案例*参数设置:-XX:+PrintGCDetails*@author田维常*@version1.0*@date2020/11/98:22*/publicclassPrintGCDetailsDemo{...

m0_67645544的博客 531

AHB—SRAMC项目(结构图,核心代码、Testbench架构)

文章目录一、AHB_SRAMC项目介绍1.1.AHB总线控制单元(ahb_slv_if.v)1.2.SRAM控制单元(sramc_top.v)1.3.主要的传输路径二、结构框图2.1.AHB_SRAMC结构图(重点)2.2.总线控制单元与SRAM控制单元结构图三、部分核心代码(重点理解)四、SystemVerilog Testbench架构(重点)五、目录结构 一、AHB_SRAMC项目介绍 本项...

Mr.翟的博客 3万+

JVM中的GC垃圾回收

文章目录JVM中的GC垃圾回收什么是GC,为什么需要GC早期的垃圾回收行为Java自动内存管理介绍垃圾回收的相关算法标记阶段:引用计数算法引用计数算法的原理引用计数算法的优缺点标记阶段:可达性分析算法GC Roots清除阶段:标记-清除算法清除阶段:复制算法清除阶段:标记-压缩(或标记-整理,Mark-Compact)算法 JVM中的GC垃圾回收 什么是GC,为什么需要GC 什么是垃圾? 垃圾是指在运行程序中没有任何指针指向的对象,这个对象就是需要被回收的垃圾。 为什么需要GC? 如果不及时的对垃圾进行清理

xzy的博客 1713

基于Python的房地产评估数据抓取与分析 —— 房价走势与市场报告

在房地产行业中,了解和分析房产价格的变化趋势、各个地区的房价差异以及市场评价报告,可以帮助投资者、购房者以及政策制定者做出更加明智的决策。本文介绍了如何使用Python爬虫技术抓取房地产平台上的房产评估报告、价格走势等数据,并对抓取的数据进行分析。通过这些技术,您可以自动化抓取房地产平台的数据,分析房价走势,获取市场报告,为房地产投资决策提供数据支持。假设我们要从链家网抓取某个房产的价格、房产描述以及历史成交价格,首先需要获取目标房产页面的URL,并发送HTTP请求。伪装为常见浏览器,避免被识别为爬虫。

2201_76125261的博客 848

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

垃圾回收和GC调优

GC和GC Tuning GC的基础知识 1.什么是垃圾 C语言申请内存:malloc free C++: new delete c/C++ 手动回收内存 Java: new ? 自动内存回收,编程上简单,系统不容易出错,手动释放内存,容易出两种类型的问题: 忘记回收 多次回收 没有任何引用指向的一个对象或者多个对象(循环引用) 2.如何定位垃圾 引用计数(ReferenceCount)...

qq_24101357的博客 8万+

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

9、学会查看GC日志

通过一个简单的例子来触发程序发生Young GC,并学会查看GC日志

weixin_35794878的博客 1万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

JVM 性能调优 -- CMS 垃圾回收器 GC 日志分析【Full GC】

上一篇我们分析了 Minor GC 的发生过程,因为 GC 日志没有按我们预估的思路进行打印,其中打印了 CMS 垃圾回收器的部分日志,本篇我们就来分析一下 CMS 垃圾收集日志。

weixin_42118323的博客 1416

生产问题(十二)GC垃圾回收导致空指针

最近线上出现由于线程池任务执行超时导致的空指针,按道理说基本不会很多执行超时的,看了看监控,那个时间点发生了gc,gc时间超过5s。 说明这次是gc垃圾回收导致的问题,实际上需要排查解决的s垃圾回收问题。表象总是和实际的原因差距很大。

m0_69270256的博客 2万+

16.9 垃圾回收器 - GC日志分析

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

u013559614的博客 4647
上一篇: 这三年被分布式坑惨了,曝光十大坑
下一篇: 不讲武德!Alibaba微服务线上架构笔记,从实战到源码精讲
爱玛士
博客等级 码龄7年 720粉丝 253原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值