关注“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 worldHeap PSYoungGen total 38400K, 46701400004498390
对于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 */@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 (minor )日志
[GC (Allocation Failure)85250.0092873
(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)8051244969293860.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