Java OOM 类型 记录

170 阅读1分钟

前言

  • 在B站看的阳哥的视频,学习,记录下来的,不知道算不算抄袭,算的话,我立马删

OOM 类型

  • Java heap space
  • GC overhead limit exceeded
  • Direct buffer memory
  • unable to create new native thread
  • GC overhead limit exceeded

GC 回收时间过长,过长的定义是:超过98%的时间来做GC,但是回收不到2%的内存,连续多次GC 都只回收不到2%的极端情况下才会抛出;假如不抛出GC overhead limit 错误,会报什么异常呢? 那就是GC刚清理的内存,马上就被占满,迫使GC再次执行,这样就形成了恶性循环,CPU 使用率是100%,但是GC却没有效果

  • Direct buffer memory

ByteBuffer.allcoteDirect(capability); 不属于JVM 的GC 管辖,不需要内存的copy,所以比较快;

  • unable to create new native thread

导致原因:

  • 1: 应用进程创建线程的数量,超过了系统限制;
  • 2:服务器不允许应用创建这么多线程,linux 系统一个进程最多创建1024个线程;
  • Metaspace