编写OOM程序

  1. package com.example.demo;
  2. import org.springframework.web.bind.annotation.GetMapping;
  3. import org.springframework.web.bind.annotation.RestController;
  4. import java.util.ArrayList;
  5. @RestController
  6. public class TestController {
  7. @GetMapping("/hello")
  8. public void c_() throws InterruptedException {
  9. System.out.println("你好");
  10. Integer K = 1024000000;
  11. ArrayList<byte[]> list = new ArrayList<>();
  12. int i = 0;
  13. while (true) {
  14. Thread.sleep(50);
  15. list.add(new byte[5 * 1024 * 1024]);
  16. System.out.println("分配次数" + (++i));
  17. }
  18. }
  19. }

启动类 , 名字瞎起的,不要在意细节

  1. package com;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. @SpringBootApplication
  5. public class Demo1111Application {
  6. public static void main(String[] args) {
  7. SpringApplication.run(Demo1111Application.class, args);
  8. }
  9. }

启动SpringBoot项目

Java OOM 内存溢出分析 - 图1

使用Java VisualVM工具监视监控JVM情况

jvisualvm具体使用看下面两个链接,等我有时间再整理整理

https://www.cnblogs.com/mzq123/p/11166640.html

https://blog.csdn.net/shuai825644975/article/details/78970371

Java OOM 内存溢出分析 - 图2

Java OOM 内存溢出分析 - 图3

Java OOM 内存溢出分析 - 图4

开始访问接口,等待OOM异常

http://localhost:8080//hello

Java OOM 内存溢出分析 - 图5

用MAT插件打开dump文件

打开dump文件需要安装Eclipse MAT(Memory Analyzer) 插件:

下面是安装方式

https://blog.csdn.net/qq_41489540/article/details/113794280

Java OOM 内存溢出分析 - 图6

Java OOM 内存溢出分析 - 图7

Java OOM 内存溢出分析 - 图8

OOM情况

Java OOM 内存溢出分析 - 图9

这里还显示在Java代码的哪行

Java OOM 内存溢出分析 - 图10