JVM内存模型

JVM虚拟机将其管理的内存划分为若干个不同的数据区域,Java虚拟机规范将 JVM所管理的内存划分如下图


线程共享区:

堆、方法区

线程私有区:

虚拟机栈、本地方法栈、程序计数器

详细讲解

几乎所有的对象实例和数组都在堆上,是垃圾收集器管理的主要区域。

方法区

用于存储被虚拟机加载的类的信息(名称、修饰符等)、常量、静态变量、类的属性、类的方法。其实就是提供类的静态描述,这个类或类型对象有什么。需要注意的是运行时常量池也在方法区中。


本地方法栈

该区域与虚拟机栈作用类似,只是虚拟机栈为 Java 方法服务,本地方法栈为使用到的操作系统方法服务


程序计数器

一块较小的内存空间,指示下一步要执行的指令序列

虚拟机栈

描述 Java 方法执行的内存模型,每个方法被执行的时候都会创建一个栈帧,栈帧用于存储局部变量表、操作树栈、动态链接、方法返回地址和一些额外信息。

下面是栈帧存放信息的简单说明,操作数栈在此不解释

1.局部变量表

局部变量表是一组变量值的存储空间,存放方法参数和方法内部定义的局部变量

2.动态链接

每个栈帧内部都包含一个指向运行是常量池的引用,持有这个引用是为了支持方法调用过程中的动态链接。在Class文件中,描述一个方法调用其它方法,或访问其它成员变量是通过符号引用来表示的,动态链接的作用就是将这些符号引用所表示的方法转换为实际方法的直接引用。符号引用一部分会在类加载阶段或第一次引用时转换为直接引用(如final、static 等),称为静态解析,另一部分在每一次运行期间转换为直接引用,这部分称为动态链接。

3.方法返回地址

上层方法的 pc 值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值