运行时数据区域详解(JVM第一天)

📰运行时数据区域(Runtime Data Area)

在这里插入图片描述

程序计数器:
  • 可以将它看作是Java字节码文件的行号指示器,字节码指示器通过修改这个值来获取下一条需要执行的字节码指令
  • 它是程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复都由程序计数器来实现
  • 如果执行的是Java方法:程序计数器记录的是字节码指令的地址
  • 如果执行的是Native方法:程序计数器值为

Java虚拟机的多线程是通过线程轮流切换,分配处理器时间来实现的,同一时刻,处理器只会执行一条线程中的指令,为了保证切换之后线程能恢复到正确的执行位置,每条线程都需要一个独立的程序计数器,且各线程之间的计数器互不影响,所以程序计数器是线程隔离的数据区域,是各个线程私有

Java虚拟机栈
  • 用于存储局部变量表、操作数栈、动态连接、方法出口
  • 它是线程私有的,生命周期和线程相同
本地方法栈
  • 它的作用和Java虚拟机栈基本相同,区别是 虚拟机栈为虚拟机执行Java方法服务(字节码)服务,而本地方法栈为虚拟机执行本地方法而服务
  • 它也是线程私有的,生命周期和线程想同
Java堆
  • 唯一目的就是存放对象的实例
  • 被所有线程所共享
  • 是虚拟机管理的最大的一块内存区域,在项目启动时创建
  • 大小可以固定也可以扩展,物理可以不连续,逻辑上要连续
  • Java堆是垃圾收集器管理的内存区域,所以可以称为”GC堆“
方法区(Method Area)
  • 用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码缓存等数据
  • 和Java堆一样,它也是被各个线程所共享的内存区域

运行时常量池

  • 运行时常量池是方法区的一部分
  • 用于存储编译过程中产生的常量池表

Class文件中除了有类的版本、字 段、方法、接口等描述信息外,还有一项信息是常量池表(Constant Pool Table),用于存放编译期生 成的各种字面量与符号引用,这部分内容将在类加载后存放到方法区的运行时常量池中

文章内容来自《深入理解Java虚拟机》的读书笔记,有误欢迎留言指正

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值