参考答案
除了程序计数器,其他内存区域都有 OOM 的风险:
- 栈一般经常会发生 StackOverflowError。栈发生 OOM 的场景,例如 32 位的 windows 系统单进程限制 2G 内存,无限创建线程就会发生栈的 OOM。
- Java 8 常量池移到堆中,溢出会出 java.lang.OutOfMemoryError: Java heap space,设置最大元空间大小参数无效。
- 堆内存溢出,报错同上,这种比较好理解,GC 之后无法在堆中申请内存创建对象就会报错。
- 方法区 OOM,经常会遇到的是动态生成大量的类、jsp 等。
- 直接内存 OOM,涉及到 -XX:MaxDirectMemorySize 参数和 Unsafe 对象对内存的申请。
以上,是JVM面试题【对OOM了解多少】的参考答案。
输出,是最好的学习方法。
欢迎在评论区留下你的问题、笔记或知识点补充~
—end—