测试 OOM 设置JVM参数然后GC日志分析

编写堆内存溢出代码

public class Test2 {
    public static void main(String[] args) {
        String str = "dededddddddddddddddddddddd";
        while (true){
            str+=str+"dedddddddddddddddddddddddddddddddddddddddddddddddddd";
        }
    }
}

在我们idea或者eclipse里配置我们JVM参数:
-xms8m -Xmx8m -XX:+PrintGCDetails

在这里插入图片描述

参数说明:

-XX:+PrintGCDetails 发生gc时打印日志

-Xmx8M 表示堆最大为8M

-xms8M 表示初始堆大小为8M
表示我们当前JVM中堆内存最大只能使用8m,测试出堆内存溢出异常 查看GC日志,
在我们测试代码运行后 控制台出现以下日志

在这里插入图片描述

GC:表示轻GC Full GC:表示重GC

[GC (Allocation Failure) [PSYoungGen: 1536K->504K(2048K)] 1536K->816K(7680K), 0.0009005 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 

1536K->504K(2048K)] 1536K->816K(7680K)
1536K:表示gc前,新生区已使用的空间
504K:表示gc后,新生区已使用的空间
2048K:新生区内存总大小
1536K:表示gc前,堆已使用空间的大小。
816K:表示gc后,堆所使用空间大小。
7680K:等于新生区加老年区的和

在这里插入图片描述

相关文章

jinfo 命令可以用来查看 Java 进程运行的 JVM 参数,命令如下...
原文链接:https://www.cnblogs.com/niejunlei/p/5987611.ht...
java 语言, 开发者不能直接控制程序运行内存, 对象的创建都是...
jvm
1.jvm的简单抽象模型:  2.类加载机制     双亲委派模...
堆外内存JVM启动时分配的内存,称为堆内存,与之相对的,在代...
1.springboot和tomcat2.springcloud的请求如何通过网关鉴权?...