【深入理解jvm读书笔记】运行时数据区域有哪些

news/2024/5/20 9:35:32 标签: jvm, , , 内存, 常量池

运行时数据区域有哪些

      • 一、程序计数器
      • 二、java虚拟机
      • 三、本地方法
      • 四、java
      • 五、方法区
      • 六、运行时常量池

一、程序计数器

是当前线程所执行的字节码的行号指示器,它是程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成,线程间不共享

二、java虚拟机

存储局部变量表、操作数、动态连接、方法出口等信息

线程间不共享

保证方法执行顺序,存储局部变量

局部变量表存放了编译期可知的各种Java虚拟机基本数据类型(boolean、byte、char、short、int、float、long、double)、对象引用(reference类型,它并不等同于对象本身,可能是一个指向对象起始地址的引用指针,也可能是指向一个代表对象的句柄或者其他与此对象相关的位置)和returnAddress类型(指向了一条字节码指令的地址)

这些数据类型在局部变量表中的存储空间以局部变量槽(Slot)来表示,其中64位长度的long和

double类型的数据会占用两个变量槽,其余的数据类型只占用一个。局部变量表所需的内存空间在编译期间完成分配,当进入一个方法时,这个方法需要在帧中分配多大的局部变量空间是完全确定的,在方法运行期间不会改变局部变量表的大小。请读者注意,这里说的“大小”是指变量槽的数量,虚拟机真正使用多大的内存空间(譬如按照1个变量槽占用32个比特、64个比特,或者更多)来实现一个变量槽,这是完全由具体的虚拟机实现自行决定的事情。

三、本地方法

和java虚拟机一样,只不过存储本地方法(native)(操作系统函数),线程私有

四、java

存储对象

线程间共享

注意:List在内存中是连续的,属于大对象,不会轻易被回收,所以大量的向list中塞东西会造成内存溢出

五、方法区

存储已被虚拟机加载的类型信息、常量、静态变量、即时编译器编译后的代码缓存等数据

线程间共享

针对常量池的回收和对类型的卸载

六、运行时常量池

运行时常量池是方法区的一部分,存放编译期生成的各种字面量与符号引用

线程间共享

运行期间也可以将新的常量放入池中


http://www.niftyadmin.cn/n/4958630.html

相关文章

【C++】做一个飞机空战小游戏(十一)——游戏过关、通关、结束的设置

[导读]本系列博文内容链接如下: 【C】做一个飞机空战小游戏(一)——使用getch()函数获得键盘码值 【C】做一个飞机空战小游戏(二)——利用getch()函数实现键盘控制单个字符移动【C】做一个飞机空战小游戏(三)——getch()函数控制任意造型飞机图标移动 【C】做一个飞…

【Go】Goland项目配置运行教程

Golang项目配置运行教程 1.安装Golang下载安装包安装 2.Goland配置 注意,本项目描述的是git clone下来的Golang项目配置运行教程,并不是从头创建一个Golang项目并运行 作者是在win11系统上使用goland进行的实践,其他操作系统和比编辑器请谨慎…

Element-Ui Select下拉框无限滚动调分页接口(自定义指令)

需求: 想要一次加载10条数据,滚动条加载到底部触发下一个十条数据,无限循环直到无数据 一、首先在src下创建一个js文件,完成自定义指令的编写 directives.js import Vue from vueexport default () > {Vue.directive(selectScroll, {bind…

【vue】更改角色权限后,实现页面不刷新更改其可展示的导航菜单

登入的角色本身属于领导级别(集团权限),没有下级的不同权限: 切换不同身份(公司),以获得相应部门的不同导航菜单及权限 这里实现:更改角色权限后,实现页面 不刷新 更改…

系统集成项目管理工程师【中级】考证学习资料整理分享——第一章《信息化基础知识》,持续更新中........

系统集成项目管理工程师(中级)考证学习资料整理分享,持续更新中........ 第一章 《信息化基础知识》 一、信息与信息化 在充满前所未有的创新活力的同时,信息化正以更快地速度推进生产力的发展,围绕智能制造、云计算、网络空间、移动互联、工业互联、大数据、信息安全等领…

小程序中通过canvas生成并保存图片

1. html <canvas class"canvas" id"photo" type"2d" style"width:200px;height: 300px;"></canvas> <button bindtap"saveImage">保存</button> <!-- 用来展示生成的那张图片 --> <image…

docker版jxTMS使用指南:使用jxTMS提供数据

本文讲解了如何jxTMS的数据访问框架&#xff0c;整个系列的文章请查看&#xff1a;docker版jxTMS使用指南&#xff1a;4.4版升级内容 docker版本的使用&#xff0c;请查看&#xff1a;docker版jxTMS使用指南 4.0版jxTMS的说明&#xff0c;请查看&#xff1a;4.0版升级内容 4…

【Web系列二十三】Ts下实现字典

目录 写在前面 代码实现 具体使用 写在前面 ts下没有原生的字典类&#xff0c;这里手动实现一个类型安全的字典。 代码实现 直接上代码 class Dictionary<T> {private items: { [ key: string | number ]: T } {}constructor (items: { [ key: string | number ]: …