在一般的模型中,两个不同的栈帧的内存区域时独立的,但是大部分的JVM在实现中会进行一些优化,使得两个栈帧出现一部分的重叠。(主要体现在方法中参数传递的情况下),让下面栈帧的操作数栈和上面栈帧的部分局部变量重叠在一起,这样做不但节约一部分空间,更重要的是进行方法调用时可以直接共用一部分数据,无需进行额外的时间、空间进行参数的赋值传递了。
使用 JHSDB 工具查看栈空间一样可以看到
(工具使用查看这篇博客:http://wangchunlong.cn/article/27 ,这个工具作为Java程序员必须要掌握)
测试代码:
/**
* @author wangchl
*
* JVM对栈帧空间的优化
*
**/
public class JVMStack {
public int work(int x) throws Exception{
int z =(x+5)*10;//局部变量表有, 32位
Thread.sleep(Integer.MAX_VALUE);
return z;
}
public static void main(String[] args)throws Exception {
JVMStack jvmStack = new JVMStack();
jvmStack.work(10);//10 放入main栈帧 10 ->操作数栈
}
}
JHSDB 查看内存信息
最后修改于 2020-07-20 17:35:04
如果觉得我的文章对你有用,请随意赞赏
扫一扫支付

