java进阶之java虚拟内存(2) 栈和栈帧

栈是一种先进后出,后进先出的数据结构。

在每一条java线程被创建时,jvm都会为其创建一个线程栈,这个栈是该线程独享的。线程栈里存放的是栈帧。

栈帧也叫方法栈帧,当线程调用到一个方法时,会为这个方法创建一个方法栈帧,并且将这个栈帧压入线程栈中,当调用完这个方法后,该栈帧就会被弹出。

栈帧包括三个部分内容:局部变量区、操作数栈、帧数据区。

局部变量区:当方法栈帧被创建时,jvm会根据当前方法的所有变量类型的大小来创建一个固定的数组,此数组的单位是字长,int、byte、shot、float、byte、boolean、refrence(对象引用)都只占一个字长,而long、double则占二个字长。该数组就是局部变量区的内容,上图

      

操作数栈:操作数栈是存放操作数的一个临时栈,比如一个方法体里有 int sum = 3+2;这条程序,那操作数栈发生的动作是:1)将操作数2压入操作数栈,2)将操作数3压入操作数栈,3)将3和2弹出并相加,4)将结果5重新压入操作数栈,5)将5弹出并存放到局部变量区中

帧数据区:帧数据区主要用于常量池的解析、异常的处理等,此区暂待研究。


《深入java虚拟机》确实是一本牛B哄哄的书。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值