浅谈虚拟机(2)受害者和凶手登场の内存详解

本来想要在一篇博客中写完对象创建的所有内容。但是发现对象创建并不是三言两语可以写完,因此改为一个系列博客。而JVM有一个非常重要的功能便是对对象的管理,因此正好借对象创建的例子,来一点一点盘剥虚拟机的神奇之处。
类在内存中的加载分为两步,第一步是类加载,第二步是内存分配。在讲这两步之前先对内存区域进行讲解。

JVM(Java Virtual Mechine)内存区域

图1
上图是JVM运行时数据区。
本文主要讲解方法区、堆、虚拟机栈。通常大家会以堆和栈来简单理解JVM,其中的栈就是虚拟机栈,而堆则是图中的堆和方法区。

虚拟机栈

虚拟机栈描述的是java方法调用和执行的内存模型。

栈帧:

这里写图片描述
每个java方法在执行的时候都会创建一个栈帧,该栈帧会用来存放局部变量表、操作数栈、动态链接、返回地址等信息。虚拟机栈中存放有多个栈帧,而方法的调用链可能很长,很多方法都处于执行状态。在活动线程中,只有处于栈顶的栈帧才是有效的,被称为当前栈帧,与这个栈帧相关联的方法成为当前方法执行引擎运行的所有字节码指令都只针对当前栈帧进行操作。

局部变量表:

局部变量表是一组变量存储空间,用于存储方法实参和方法内部定义的局部变量(local variable)。在java进程被编译为class文件的时候,就根据方法的code属性中max_locals数据项分配了局部变量表所需的最大空间。详细内容在 浅谈虚拟机之局部变量表 中有详细讲述(URL:http://blog.csdn.net/qq_14885857/article/details/73359499

操作数栈:

用来存放操作指令的区域:操作数;操作码。如1 + 2 这个操作,操作数是1和2,操作码是+。再如 i++,操作数是变量i,操作码是++。(URL:http://blog.csdn.net/qq_14885857/article/details/73518725

动态连接:
返回地址:

方法区

运行时常量池

程序计数器

本地方法栈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值