当前位置: 首页 > news >正文

【jvm|基本原理】第四天

摘要:

        本文简单分析了Java虚拟机的核心运行机制。首先介绍了基本数据类型在32位和64位虚拟机中的存储差异,说明slot槽设计以空间换时间的优化思路。其次详细解析了对象在堆内存中的存储结构,包括对象头、对象数据和对齐填充机制。然后探讨了方法调用的实现原理,包括静态绑定和动态绑定两种方式。接着阐述了异常捕获通过异常表实现的机制。最后简要介绍了JIT即时编译器的关键技术,包括方法内联和逃逸分析。全文从底层视角揭示了JVM高效运行的关键技术原理。

一,基本数据类型

        32位虚拟机中,slot槽占4个字节,64位中占8个字节,这一设计以空间换时间,避免不同数据类型不同处理方式带来的开销,也保证了对虚拟机的适配性

数据类型堆(字节)栈slot槽(4/8字节)
byte11
short21
int41
long82
float41
double82
char21
boolean11

(1)堆-->栈

boolean、char为无符号,低位复制,高位补零;byte、short有符号,低位复制,高位非负则补0,负则补1

(2)栈-->堆

二,对象在堆中的存储(普通对象/数组对象)

【1】对象头

1,标记字段

主要记录该类的一些特定信息,如:锁状态,hashcode值,存活寿命(垃圾回收)等等

2,元数据的指针

指向方法区的InstanceKlass对象,64位虚拟机默认占8个字节,会进行指针压缩-->4个字节

【2】对象数据

1,对象属性

(1)字段对应的offset必须被该字段的数据类型整除,如果不能整除会调整字段的前后位置,通过数据重排来保证或者对象填充。

2,内存对齐填充

        内存对齐填充是一种优化技术,用于确保对象在堆内存中的布局满足特定边界对齐要求。这主要是为了提高CPU访问内存的效率,避免两个不同的对象分配到同一个缓存行中可能导致性能下降

(1) CPU访问内存时,如果数据地址是某个对齐值(如8字节)的倍数,访问速度更快。例如,在64位系统中,常见对齐要求是8字节。

(2)对象头包含元数据(如锁状态、GC信息),大小通常为12字节(在64位JVM中,8字节mark word + 4字节klass pointer)。但为了对齐,JVM可能会添加填充字节。

三,方法的调用

        方法的调用通过虚拟机栈来实现-->每当调用一个方法就会生成一个对应的栈帧,方法结束栈帧销毁。

1,四种方法调用的字节码指令

2,方法调用的原理

解决怎么样在保存了多个类和多个方法的方法区中找到对应的方法的字节码数据

(1)静态绑定

(2)动态绑定(实现多态)

四,异常捕获的原理

        通过异常表来实现异常捕获,异常表主要包含表号、启始PC、结束PC、跳转PC和异常捕获类型(RuntimeException...)关键信息

 1,Family的实现

五,Jit即时编译器

1,方法内联

2,逃逸分析(标量替换)

 3,总结

http://www.lryc.cn/news/589209.html

相关文章:

  • 力扣 hot100 Day45
  • LeetCode Hot100 【1.两数之和、2.两数相加、3.无重复字符的最长子串】
  • 拼多多笔试题目一
  • 人机协作系列(四)AI编程的下一个范式革命——看Factory AI如何重构软件工程?
  • 力扣——1071. 字符串的最大公因子
  • 基于Alpine构建MySQL镜像
  • sublime如何支持换行替换换行
  • PHP安全漏洞深度解析:文件包含与SSRF攻击的攻防实战
  • Azure FXmsv2 系列与 Azure FXmdsv2 系列虚拟机正式发布
  • 606. 二叉树创建字符串
  • Java全栈工程师面试实录:从电商支付到AI大模型的应用场景与技术栈解析
  • Android 获取 UserAgent (UA) 的三种方式深度解析:差异、风险与最佳实践
  • C++中的模板参数 vs 函数参数:编译期与运行期的分界线
  • X 射线探伤证考试核心:辐射安全基础知识点梳理
  • 如何正确分配及设置香港站群服务器IP?
  • 创客匠人:创始人 IP 的破局思维,重构知识变现的深层逻辑
  • LeetCode--46.全排列
  • 梳理Bean的创建流程
  • keeplived双击热备配置
  • 【高并发服务器】多路复用的总结 eventfd timerfd
  • 在Autodl服务器中使用VNC建立图形界面
  • JavaBean
  • 【亲测有效】ubuntu20.04服务器新建用户+vnc配置教程
  • 域名转发设置
  • linux 内核: 遍历当前所有进程
  • 演示扩展卡尔曼滤波在无人驾驶多传感器融合中的应用
  • Wiz笔记二次开发
  • 使用LNMP一键安装包安装PHP、Nginx、Redis、Swoole、OPcache
  • 可微分3D高斯溅射(3DGS)在医学图像三维重建中的应用
  • vllm本地部署qwen3-4b