-Xms
表示 JVM
启动时分配的内存、 -Xmx
表示 JVM
运行过程中最大可用内存。 -Xss
决定,而栈内存取决于 栈帧数量,即栈深度
,以及 每个栈帧的大小
。 2
种异常分为 OOM
以及 StackOverflowError
,那么,取决于什么情况,会抛相应的异常呢? 取决于栈内存是否支持扩展,HotSpot虚拟机不支持扩展
HotSpot
虚拟机不支持扩展,因此 OOM
的发生情况:创建线程时就因为无法获得足够内存而出现 OOM
,创建线程时内存不足,恰恰 原因可能是每个线程的栈分配内存设置过大
,在操作系统内存使用状态的影响下发生。 -Xss
所决定的栈内存容量,就会抛出 StackOverflowError
。 String::intern()
) String::intern()
String::intern()
来制造方法区和常量池的 OOM
1、JDK6或更早:字符串常量池大小增长,导致永久代的内存大小超过 -XX:MaxPermSize
规定的大小,导致出现 PermGen space
出现 OOM
。
2、JDK7开始,字符串常量池移入Java堆中,使用 String::intern()
报出 OOM
也是 Java heap space
CGLib产生大量的类填充方法区,制造 OOM
PermGen space
出现 OOM
Java heap space