网络公司 建站 官方网站,苏中建设集团网站,天津网站制作专业,网站维护技术文章目录 #x1f354;什么是运行时数据区⭐程序计数器⭐栈#x1f50e;Java虚拟机栈#x1f388;栈帧的内容 #x1f50e;本地方法栈 ⭐堆⭐方法区 #x1f354;什么是运行时数据区
运行时数据区指的是jvm所管理的内存区域#xff0c;其中分为两大类
线程共享#xf… 文章目录 什么是运行时数据区⭐程序计数器⭐栈Java虚拟机栈栈帧的内容 本地方法栈 ⭐堆⭐方法区 什么是运行时数据区
运行时数据区指的是jvm所管理的内存区域其中分为两大类
线程共享方法区堆线程不共享程序计数器栈本地方法栈虚拟机栈
方法区存放每一个加载的类的基础信息运行时常量池字符串常量池 堆存放创建出来的对象 本地方法栈和虚拟机栈都存放了线程中执行方法时需要使用的基础数据。 程序计数器存放了当前线程执行的字节码指令在内存中的地址。
直接内存主要是NIO使用有操作系统直接管理不属于JVM内存
⭐程序计数器
程序计数器也叫PC寄存器每个线程会通过程序计数器记录当前要执行的字节码指令的地址 主要有2个作用
可以控制程序指令的进行实现分支跳转异常等逻辑在多线程执行情况下Java虚拟机需要通过程序计数器记录CPU切换前解释执行到的指令并且继续解释执行 表面上2个线程是并行的其实实际上是交替执行的执行一会线程A后会执行一会线程B然后继续交替执行 ⭐栈
Java虚拟机栈
Java虚拟机栈采用栈的数据结构来管理方法调用中的基本数据先进后出 每一个方法的调用所以一个栈帧来保存 每个线程都会包含一个自己的虚拟机栈它的生命周期和线程相同这样子也能看出jvm的线程是不共享的因为每个线程都有自己的栈
栈帧的内容
主要包含下面3部分内容
局部变量表在方法执行过程在存放所有的局部变量操作数帧虚拟机在执行指令过程中用来存放临时数据的一块区域帧数据
本地方法栈
Java虚拟机栈存储了Java方法调用时的栈帧而本地方法栈存储的是native本地方法的栈帧 在hotspot虚拟机中Java虚拟机栈和本地方法栈实现上使用了同一个栈空间。本地方法栈会在栈内存上生成一个栈帧临时保存方法的参数的同时方便出现异常时也把本地方法的栈信息打印出来
⭐堆
一般Java程序中堆内存是空间最大的一块内存区域创建出来的对象都存储在堆上 栈上的局部变量表可以存放堆中的对象的引用。静态变量也可以存放堆中的对象的引用通过静态变量就可以实现对象在线程之间共享 堆是垃圾回收最重要的部分堆结构更详细的划分于垃圾回收器有关
⭐方法区
方法区是Java虚拟机规范中提出来的一个虚拟机概念在HotSpot虚拟机不同版本中会使用永久代或者元空间来实现。方法区主要存放的是基础信息如下 每一个加载类的基础信息 运行时常量池保存了字节码文件中的常量池内容比卖你常量内容重复创建减少内存开销 字符串常量池存储字符串的常量 在技术的道路上我们不断探索、不断前行不断面对挑战、不断突破自我。科技的发展改变着世界而我们作为技术人员也在这个过程中书写着自己的篇章。让我们携手并进共同努力开创美好的未来愿我们在科技的征途上不断奋进创造出更加美好、更加智能的明天