jvm 内存溢出

╰+攻爆jí腚メ 2023-07-19 10:46 110阅读 0赞

jvm 内存溢出

内存溢出:内存空间耗尽的时候,就会抛出OutOfMemoryError

内存溢出原因:堆内存溢出、直接内存溢出、元空间内存溢出等;

直接内存、元空间溢出较少发生,发生时通过相关参数将对应内存空间调大即可

*************************

堆内存溢出

堆内存溢出:full gc后仍无法为对象分配足够的内存,就会抛出OutOfMemoryError

大部分对象都是在堆内存上进行分配,内存溢出大都由堆内存溢出导致

解决办法:设置合理的堆内存大小避免一次性加载过多的数据

*******************

示例

  1. public class Test {
  2. private static int _1m=1024*1024;
  3. public static void main(String[] args){
  4. List<byte[]> list=new ArrayList<>();
  5. for (int i=0;i<20;i++){
  6. list.add(new byte[_1m]);
  7. System.out.println("add "+i);
  8. }
  9. System.out.println(list);
  10. }
  11. }

虚拟机参数

  1. -Xms20m -Xmx20m

控制台输出

  1. add 0
  2. add 1
  3. add 2
  4. add 3
  5. add 4
  6. add 5
  7. add 6
  8. add 7
  9. add 8
  10. Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
  11. at runtime.Test3.main(Test3.java:13)

发表评论

表情:
评论列表 (有 0 条评论,110人围观)

还没有评论,来说两句吧...

相关阅读

    相关 实现jvm内存溢出

    那么我们如何来构建一个堆内存溢出呢?其实很简单,我们只要定义一个`List`对象,然后通过一个循环不停的往`List`里面塞对象。因为只要Controller不被回收,那么它里

    相关 JVM内存溢出详解

    JVM内存溢出详解(栈溢出,堆溢出,持久代溢出以及无法创建本地线程) 写在前面 内存溢出和内存泄漏的区别: 内存溢出 out of memory,是指程序在申请内存