℃江的观后感-- 栈相关

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/baidu_34750904/article/details/80401593
  • JVM总是要提到堆栈的概念,其实一直有这样一种说法:对于计算机来讲堆就是栈。虚拟机栈是Java 方法执行的动态内存模型。
  • 栈是针对栈帧而言的,每一个方法的执行都会创建一个栈帧,其是始终伴随方法的,其实有点像哈希中那个地址编码的概念。
  • 在这里还要知道局部变量表的概念,其在 javac(编译期)的时候就已经完成了分配,也就是说一个方法需要分配多少内存空间,在调用这个方法之前JVM早就知道了,所以你无论怎么调用此方法,都不会影响到局部变量表大小的改变。这时候大家会想,对象里面有个String 类型的参数,这个参数大小是可以人为传递的,为什么会大小不变呢?其实是这样的,假设有个人名叫,AE86吧,体型180斤,身高180厘米等等特征。局部变量表只存其AE86 这个不可重复的名,其他信息存在了另一个栈中(细致讲应该是堆,我之前有说过堆栈就是一个东西,区别可能就是存的数据量)。其实这个代号(也就是所谓的引用)的大小局部变量表还是可以控制的。
  • 当我们的栈放不下栈帧的时候怎么办?这时其实就有一种异常的产生了,叫做Stack OverflowError

猜你喜欢

转载自blog.csdn.net/baidu_34750904/article/details/80401593