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

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

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

* 打印垃圾回收日志案例

* 参数设置: -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项目,非常简单的项目,里面写了一个controllerpackage 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 */

@RestController

public class GCController {

List strings = new ArrayList<>();

@GetMapping("/gc")

public String addObject() {

System.out.println("-------gc-------");

for (int i = 0; i

try {

Thread.sleep(20);

} catch (InterruptedException e) {

e.printStackTrace();

}

int [] a=new int[500000];

strings.add(a);

}

return "ok";

}

}

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

在IDEA中设置

输出结果

抓出一段来聊聊

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)?

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

  1. 想知道垃圾回收暂停的过程中发生了什么吗?查查垃圾回收日志就知道了!

    \ 关键点 \ 垃圾回收日志中包括着一些关键性能指标: \ 要做一次正确的垃圾回收分析需要收集许多数据,所以好的工具是非常必要的: \ 除了垃圾回收之外还有很多事件都可能会让应用程序暂停: \ 让你的 ...

  2. 万字长文教你看懂java G1垃圾回收日志

    文章目录 一.如何在idea打印G1日志 二.G1基础参数 三.G1新生代收集 1. 四个关键信息 2. 列出了新生代收集中并行收集的详细过程 3.列出了新生代GC中的一些任务: 4.包含一些扩展功能 ...

  3. 一篇文章教你弄懂java CMS垃圾回收日志

    文章目录 一.CMS垃圾回收器介绍 二.CMS JVM运行参数 三.CMS收集器运行过程 1.初始标记(CMS initial mark) 2.并发标记(CMS concurrent mark) 3. ...

  4. Java垃圾回收日志解析

    1.开启垃圾回收日志 在运行一个java程序时可以在命令行中加入相应的JVM垃圾回收参数,获取程序运行时详细的垃圾回收日志信息.以下是一些大概的参数: -XX:+PrintGC与-verbose:gc ...

  5. idea本地跑如何看gc日志_线上故障如何快速排查?来看这套技巧大全

    简介:有哪些常见的线上故障?如何快速定位问题?本文详细总结工作中的经验,从服务器.Java应用.数据库.Redis.网络和业务六个层面分享线上故障排查的思路和技巧.较长,同学们可收藏后再看. 前言 线 ...

  6. idea本地跑如何看gc日志_牛逼了!用 IDEA 扒出了开源组件导致FGC的原因

    某天上午收到最近发布的一个服务频繁FGC的告警,这个服务只是给公司内部相关人员使用的,并非给互联网用户提供服务的系统.而且功能也比较简单,就是查看一些统计信息.报表数据.数据导出Excel等,访问量非 ...

  7. 如何linux查看mysql目录下日志_测试人员如何在linux服务器中查询mysql日志?

    测试工程师在测试软件的过程中,流程往往是先接口测试,接着就是功能性测试.在做功能性测试的时候,往往有这么一个工作场景,就是出现错误后,我们怎么快速排除数据库报错. 举例某个电商网站,当我们文本框中输入 ...

  8. java jvm垃圾回收算法_深入理解JVM虚拟机2:JVM垃圾回收基本原理和算法

    本文转自互联网,侵删 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 喜欢的话麻烦点下Star哈 文章将同步到我的个人博客: www.how ...

  9. G1垃圾回收日志分析

    标准 gc 日志 使用G1垃圾回收器最难的地方是读懂回收日志.G1回收虽然也是分代的,但是打印出来的日志却不像其他回收器那样明显.所以需要好好配置JVM参数才行.先看下面一段日志,这段日志是通过配置好 ...

最新文章

  1. 随机一段字符串,浏览器点击复制
  2. rsyslog+loganalyzer+evtsys搭建集中式监控系统
  3. SQL语句的执行过程
  4. 请求的转发:RequestDispatcher对象处理请求的两个方法--forward和include
  5. 【随笔】深度学习之美——杨家有女初长成,养在深闺人未识
  6. springboot集成邮箱功能
  7. 机器人学习--ROS/AMCL实现初始化粒子撒满整张地图和分步收敛
  8. 内存分配方式以及堆和栈的区别
  9. Sqlserver2008相关配置问题
  10. 想要学习C++,到底能从事哪种行业?
  11. txt简谱制作器上线(个人java程序)
  12. Apple EDI X12 业务报文解析(一)—— 850采购订单
  13. Maven传递依赖无法引入问题(The POM for xxx is invalid)
  14. 史上最全零基础学习java干货!千万别错过!
  15. wi-fidns服务器未响应,192.168.31.1登录界面
  16. 发布下今天学习内容--CentOS7安装Oracle 11gR2 图文详解
  17. 如何制作Android语音机器人
  18. php剪切透明圆,php把图片处理成圆形透明的图片,做圆形透明头像,圆形头像_编程资料分享...
  19. 太原市山大附中2021年高考成绩查询,太原高中排名及分数线,2021太原市高中排名榜最新...
  20. 云原生技术赋能联邦学习

热门文章

  1. 基于struts2和hibernate的登录和注册功能——完整实例
  2. log4j 日志限制大小 拆分成30个 不按日期分日志 按大小拆分 按日期产生...
  3. SCVMM2012 SP1 之虚拟机模板的创建
  4. ACL-文件访问控制列表
  5. centos 调整系统时间
  6. (linux)查看及修改文件权限以及相关
  7. VM结构、GC工作机制详解
  8. Python 闭包相关之late binding机制
  9. 洛谷 P1865 A % B Problem[筛素数/前缀和思想/区间质数个数]
  10. Mysql日期时间Extract函数介绍