JVM学习02
虚拟机栈
- 每个线程运行时JVM开辟一块新的内存称为虚拟机栈,后进先出的特点。
- 每个栈由多个栈帧组成,每个栈帧对应每个方法调用时所需的内存。
- 每个线程只能有一个活动栈帧,对应当前线程正在执行的某个方法。

栈内存溢出
- JVM默认栈内存分配大小为1024k,若栈帧过多(不当的递归调用)或栈帧过大都会导致默认的栈内存不够从而栈内存溢出。
- 可通过配置VM options指定-Xss2048k合理调整栈内存大小,但并非分配越大越好,分配栈内存越大,能开启的线程数量则相对减少,活动栈帧也随之减少。
- 实体之间属性循环依赖,在将实体类转换成Json字符串时容易出现栈内存溢出问题。
栈帧过多溢出例子如下:
public class JVM01 {
public static int count;
public static void main(String[] args) {
try {
m1();
} catch (Throwable e) {
e.printStackTrace();
System.out.println("m1调用"+count+"次后栈内存溢出");
}
}
public static void m1(){
count++;
m1();
}
}

浙公网安备 33010602011771号