前言
- 在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