从四则运算认识JVM内存模型

首先,在main()方法里面定义了y、x、d等变量,而在math()方法里面对传入变量作对应的四则运算(这里采用"+"、"x"),计算值并return返回main()方法。

于是,采用<ASM工具,ProxyGenerator>对其生成相应的字节码分析可得:

 

由图可知,在方法里面定义的局部变量都有其对应的归属地<局部变量表>,先进后出。程序计数器可以看作是当前线程所执行的字节码的行号指示器<分支、循环、跳转、异常处理、线程恢复等基础功能都依赖计数器finished>,若线程正在执行的是一个Java方法,则记录的是正在执行的虚拟机字节码指令的地址,若为Native方法,则计数器值为null(Undefined),此内存区域是唯一一个在Java虚拟机规范中没有规定任何oom情况的区域。与程序计数器一样,Java虚拟机栈也是线程私有的,它的生命周期与线程相同,描述的是Java方法执行的内存模型,每个方法在执行时会创建一个栈帧,用于存储局部变量表、操作数栈、动态链接、方法出口等,在调用math()方法并return<出口>的地方,也有其相应的归属等等。

Java虚拟机规范对Java虚拟机栈规定了俩种异常情况:若线程请求的栈深度大于虚拟机所允许的深度,将抛出StackOverflowError异常;若可动态扩展,而无法可申请到足够的内存,将抛出OutOfMemoryError异常。<本地方法栈也同样会抛出>。

当在没有被引用的时候,通过GC机制回收,如有则从Eden到From到To过渡最终到老年代,这时候就会full gc出现oom<提示内存已耗尽>。

SoS:堆的内存管理尤为关键,那就让我们再一起去认识GC<do>·?yxd179哟?

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值