内存划分
OutOfMemoryError
heap 溢出 OutOfMemoryError
heap 用来存储对象实例
heap 内存的溢出条件:
- 不断有对象实例被创建,添加到 heap
- 并且 GC roots 到达对象时,垃圾回收还没有腾出足够的空间 JVM 垃圾回收算法 可达性分析
- 对象数量在达到最大堆容量后内存溢出
相关的 JVM 参数
-Xms可以和-Xmx设定成一样避免堆自动扩展-Xmx-XX:+HeapDumpOnOutOfMemoryError虚拟机在内存溢出时自动 Dump 当前内存堆转储快照
java.lang.OutOfMemoryError
分析
Eclipse Memory Analyzer
栈溢出 StackOverflowError
调用栈溢出
相关JVM参数:
Xss栈内存
Runtime 常量池溢出
-XX:PermSize=10M-XX:MaxPermSize=10
通过 JVM 参数设定大小
RuntimeConstantPoolOOM
方法区溢出
溢出条件:
- 方法区,Class 信息,类名,访问修饰符,常量池,字段描述,方法描述,运行时产生大量的类导致溢出
本机直接内存溢出
内存无法分配时