JVM 运行时分区

Java 文件加载到内存的过程:

  1. Java 文件经过编译器编译生成Class文件
  2. Class 文件通过类加载器ClassLoader 加载到JVM内存中
  3. Java JVM 内存被划分为几个部分:程序计数器、虚拟机栈、本地方法栈、堆、方法区

1.程序计数器;java 程序是多线程的,当某个线程被挂起时需要记录当前线程执行到的位置,方便该线程被重新运行时知道从哪条指令开始执行,这就是程序计数器的作用。

支持的操作:分支操作、循环操作、跳转、异常处理等。

2.虚拟机栈:用来描述java 方法执行时的内存模型,是一个后入先出的数据结构(LIFO),每执行一个方法时会创建一个栈帧插入到虚拟机栈中,方法执行完成,该栈帧则从虚拟机栈中弹出。

栈帧:由四部分构成

  1. 局部变量表-变量值的存储空间,用来存储方法的传参以及方法内生命的局部变量
  2. 操作数栈
  3. 动态链接- 该方法调用其他方法时需要将方法区中的符号引用转为真正的引用
  4. 返回地址-方法执行完毕后需要返回到方法被调用时的位置

3.本地方法栈,和虚拟机栈类似,只不过调用的方法都是本地方法即native方法。

4.堆

存放对象实例的区域,堆中内存分为新生代(Eden, Survivor区),老年代,不同的区域存放具有 不同生命周期的对象。这样可以根据不同的区域使用不同的垃圾回收算法,从而更具有针对性,进而提高垃圾回收效率。

5.方法区

存储已经被 JVM 加载的类信息(版本、字段、方法、接口)、常量、静态变量、即时编译器编译后 的代码和数据 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值