图解Java内存区域

上一篇文章中,我们提到了对象在内存中的分布情况,图解Java传递类型,那么在这篇文章中,我会用比较通俗易懂的方式,讲解一下Java的内存和对象的内存分布情况。

Java内存区域

Java是一座围城,Java开发不需要像C、C++开发人员那样,维护每个对象从开始到终结的职责。因为Java虚拟机会帮助我们完成这些职责,但是一旦发生内存泄漏和溢出,就需要我们排查。

Java虚拟机执行Java程序时,把它管理的整个内存区域称为运行时数据区。同时根据区域的用途,以及创建和销毁时间等因素,将运行时数据区分成不同的区域。

程序计数器

程序计数器表示当前线程所执行字节码指令的行号计数器。字节码解释器通过改变程序计数器的值,选取下一条需要执行的指令。为了保证线程切换之后恢复到正确的执行位置,每条线程都需要独立的程序计数器,所以程序计数器是线程私有的。同时程序计数器是唯一一个在虚拟机规范中没有规定OutOfMemoryError的区域。

注:线程执行Java方法,程序计数器记录字节码指令地址;如果执行的是本地(Native)方法,程序计数器为空。

虚拟机栈

虚拟机栈是Java方法执行的线程内存模型。每个方法的执行,Java虚拟机都会创建一个栈帧存储方法相关变量。每个方法被调用到执行完毕的过程,对应栈帧在虚拟机栈中入栈到出栈的过程。

如下图所示,当虚拟机执行swap(a,b)方法时,会创建一个单独的栈帧swap(a,b)栈帧,在该栈帧中会存储于方法相关的变量,该栈帧的入栈和出栈操作对应着方法的执行和结束。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值