Java虚拟机学习(一)——内存分布

一、JVM运行机制

java源代码通过java编译器编译成.class字节码文件,然后字节码文件被装入内存,被解释器转换成机器码执行。不同操作系统的机器码是不同的,我们需要使用对应系统的虚拟机,这也是java语言可以跨平台运行的原因。

二、JVM虚拟机

在这里插入图片描述

  • 类加载器
    将.Class 文件加载到JVM内存中,并形成一个内存对象
  • 运行时数据区
    虚拟机执行程序时,会将内存划分为若干区域,每个区域有不同的生命周期。这些区域分为线程共享和线程私有
  • 字节码执行引擎
    执行.class字节码,修改程序计数器

三、运行时数据区

1、堆(线程共享)

存放对象实例

2、方法区(线程共享)

 又叫元空间,主要存放的是 Class信息、常量、静态变量。

其中常量或静态变量如果是对象的话,对象存放在堆中,该处存放的是堆的内存地址即指针引用

3、栈 (线程私有)

又叫虚拟机栈,每个线程拥有一块栈空间,用于存放局部变量。线程在执行每个方法的时候,都会创建一个栈帧
  • 栈帧
    1、局部变量:存放方法的局部变量,与方法区相同,如果是对象,存放对象在堆中的内存地址
    2、操作数栈:方法中,操作数的临时内存空间
    3、动态链接:符号引用转化为直接引用 存放内存地址
    4、方法出口:调用该方法的位置,用于该方法执行完毕后在什么位置继续执行

4、程序计数器 (线程私有)

程序计数器是每个线程私有的,为线程正在执行的字节码的内存地址。多线程场景中线程轮流执行,当一个线程CPU时间片用完但未执行完毕挂起时,等待CPU下次分配到时间片后再从程序计数器处继续执行

5、本地方法栈(线程私有)

服务的对象是JVM执行的native方法

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值