乐趣区

关于java:不可思议竟然还有人不会查看GC垃圾回收日志

关注“Java 后端技术全栈”

回复“面试”获取全套面试材料

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

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

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

/**
 * 打印垃圾回收日志案例
 * 参数设置:-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, 
4670
14
0
0
0
0
4498
390

对于 GC 日志的参数

-XX:+PrintGC 输入 GC 日志
-XX:+PrintGCDetails 输入 GC 的具体日志
-XX:+PrintGCTimeStamps 输入 GC 的工夫戳(以基准工夫的模式)-XX:+PrintGCDateStamps 输入 GC 的工夫戳(以日期的模式,如 2013-05-04T21:53:59.234+0800)

参数案例

-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
 */
@RestController
public 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(minor)日志

[GC (Allocation Failure)
8525
0.0092873

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

PSYoungGen:示意是 GC 类型

8525KYoungGC前新生代内存占用

352KYoungGC新生代内存占用

9216K:新生代总共大小

98695K:YoungGC 前 JVM 内存占用

98486K:YoungGC 后 JVM 内存应用

130048K:JVM 堆总大小

0.0092873 secsYoungGC耗时

user=0.00YoungGC用户耗时

sys=0.00YoungGC零碎耗时

real=0.01:YoungGC理论耗时(这里竟然四舍五入了)

Full GC 日志

[Full GC (Ergonomics)
8051
244969
29386
0.13

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

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

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

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

前面那几项和下面一样

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

举荐浏览:

《Spring Cloud 与 Docker 微服务架构实战》.pdf

《Go 语言实战》.pdf

《分布式 Java 利用根底与实际》.pdf

退出移动版