JVM--内存结构

内存结构 

程序计数器:当前线程所执行的字节码的行号指示器,用于记录正在执行的虚拟机字节指令地址,线程私有。

JVM 虚拟机栈:存放基本数据类型、对象的引用、方法出口等,线程私有。

本地方法栈:和虚拟栈相似,只不过它服务于Native方法,线程私有。

:java内存最大的一块,所有对象实例、数组都存放在java堆,GC回收的地方,线程共享。

方法区:存放已被加载的类信息、常量、静态变量、即时编译器编译后的代码数据等。(即永久带),回收目标主要是常量池的回收和类型的卸载,各线程共享

执行 java 命令

  1. 创建 JVM,调用类加载子系统加载 class,将类的信息存入方法区

  2. 创建 main 线程,使用的内存区域是 JVM 虚拟机栈,开始执行 main 方法代码

  3. 如果遇到了未见过的类,会继续触发类加载过程,同样会存入方法区

  4. 需要创建对象,会使用内存来存储对象

  5. 不再使用的对象,会由垃圾回收器在内存不足时回收其内存

  6. 调用方法时,方法内的局部变量、方法参数所使用的是 JVM 虚拟机栈中的栈帧内存

  7. 调用方法时,先要到方法区获得到该方法的字节码指令,由解释器将字节码指令解释为机器码执行

  8. 调用方法时,会将要执行的指令行号读到程序计数器,这样当发生了线程切换,恢复时就可以从中断的位置继续

  9. 对于非 java 实现的方法调用,使用内存称为本地方法栈(见说明)

  10. 对于热点方法调用,或者频繁的循环代码,由 JIT 即时编译器将这些代码编译成机器码缓存,提高执行性能

特殊说明

  • 对于 Oracle 的 Hotspot 虚拟机实现,不区分虚拟机栈和本地方法栈
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ASDFG_K6

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值