一文了解OOM及解决方案
1. Java 堆空间 发生频率: 5颗星 造成原因 无法在 Java 堆中分配对象 吞吐量增加 应用程序无意中保存了对象引用,对象无法被 GC 回收 应用程序过度使用 finalizer。finalizer 对象不能被 GC 立刻回收。finalizer 由结束队列服务的守护线程调用,有时 finalizer 线程的处理能力无法跟上结束队列的增长 解决方案 单位对应:GB -> G, g;MB -> M, m;KB -> K, k 使用 -Xmx 增加堆大小 修复应用程序中的内存泄漏 2. GC 开销超过限制 发生频率: 5颗星 造成原因 Java 进程98%的时间在进行垃圾回收,恢复了不到2%的堆空间,最后连续5个(编译时常量)垃圾回收一直如此。 解决方案 使用 -Xmx 增加堆大小 使用 -XX:-UseGCOverheadLimit 取消 GC 开销限制 修复应用程序中的内存泄漏 3. 请求的数组大小超过虚拟机限制 发生频率: 2颗星 造成原因 应用程序试图分配一个超过堆大小的数组 解决方案 使用 -Xmx 增加堆大小 修复应用程序中分配巨大数组的 bug 4. Perm gen 空间 发生频率: 3颗星 造成原因 Perm gen 空间包含: 类的名字、字段、方法 与类相关的对象数组和类型数组 JIT 编译器优化 当 Perm gen 空间用尽时,将抛出异常。 解决方案