20 lines
1.2 KiB
Markdown
20 lines
1.2 KiB
Markdown
> 除[[程序计数器]]外,其他都会发生该异常
|
||
|
||
## [[Java堆]]溢出
|
||
[[内存泄漏]]
|
||
通过工具产看泄露对象到GC Roots的引用链
|
||
[[内存溢出]]
|
||
Java heap space
|
||
内存中对象都是必须存活的
|
||
## [[虚拟机栈]]和[[本地方法栈]]溢出
|
||
请求栈深度超过虚拟机所允许的最大深度
|
||
栈允许动态扩展,扩展容量无法申请到足够内存抛出[[StackOverflowError]]
|
||
HotSpot栈容量无法动态扩展,线程申请栈空间失败是抛出[[OutOfMemoryError]]
|
||
大多数情况下正常方法调用栈深度1000~2000是没有问题,过多线程时内存溢出就需要减少最大堆和减少栈容量换取更多的线程
|
||
## [[方法区]]和[[运行时常量池]]溢出
|
||
JDK6,运行时常量池溢出PermGen space,String::intern()方法会将首次遇到的字符串实例复制到永久代的字符串常量池储存
|
||
JDK7,字符串常量池已经移到堆中
|
||
JDK8,取消永久代,使用元空间
|
||
方法区溢出
|
||
## 本机[[直接内存]]溢出
|
||
Heap Dump文件中不会有明显的异常情况,如果内存溢出后产生的Dump文件很小,程序中直接或间接使用了DirectMemory(NIO)可考虑检查直接内存 |