JVM原理

一、栈上的数据存储

(一)、概述

fe8eabd44f42466aaba2a9b8dd7c3152.png

在32位虚拟机中,局部变量表中每个槽占32位,所以long和double类型的数都占据两个槽

在64位虚拟机中, 局部变量表中每个槽占32位,但是为了保证字节码的通用性,所以仍然占两个槽,内存空间为通用性做出了让步。

3b7e4f9200194951b58d28c1685e2a7d.png

8a4f4a3b5b724d00a2847362cb7680ba.png

(二)、原理

6c527a986d154545a56dbe81c4e16fe8.png

堆->栈  :   补全 

6e9c347853864f0ba97cb57c8b1babf2.pngae129a59c7114f3ebbb965637ed21713.png 栈->堆  : 截断  boolean特殊,只取最后一位

 52ee1cb1a98e45d6ab8057679aa6f0a7.png

二、对象在堆上是如何存储的?

(一)、对象在堆中的内存布局

2d1f8b46485246bb8f5ec76508bc1902.png

a12166fbac84490daacfbabbadb2ba8c.png ebb818489fa2432d9e2adb705c32bad3.png

 c90bb50cfe844a7485389db53ef0dda9.png

(二)、指针压缩

bb2cae35fbbb4e14a58fc9794c630826.png

在64位的Java虚拟机中,Klass Pointer以及对象数据中的对象引用都需要占用8个字节,为了减少这部分的内存使用量,64 位 Java 虚拟机使用指针压缩技术,将堆中原本 8个字节的指针压缩成 4个字节 ,此功能默认开启,可以使用-XX:-UseCompressedOops关闭。

4840a382ac3949faabc19599ab335ad3.png

问题:

  1. 需要进行内存对齐,指的是将对象的内存占用填充至8字节的倍数。存在空间浪费(对于Hotspot来说不存在,即便不开启指针压缩,也需要进行内存对齐)
  2. 寻址大小仅仅能支持2的35 次方个字节(32GB,如果超过32GB指针压缩会自动关闭)。不用压缩指针,应该是2的64次方 = 16EB,用了压缩指针就变成了8(字节) = 2的3次方 * 2的32次方 = 2的35次方

(三)、内存对齐

b5ce90448faa499f947fb10467bb7e66.png

e4f2f7ef49bd42b9a86202f8905a8c29.png

在Hotspot中,要求每个属性的偏移量Offset(字段地址 – 起始地址)必须是字段长度的N倍。
比如下图中,Student类中的id属性类型为long,那么偏移量就必须是8的倍数。

c83219f76c4d4cb9a4cb37bcbf2bebcd.png

ba9fa8b264834e10bf6d70252029c2d9.png

3f30bb08d9534ecfb04bb6d2286bdd70.png

三、方法调用的原理

973a9152f38a483d99c9505062a3f5c5.png

(一)、静态绑定

8509262489b34bb68b3a65444c17aa61.png

(二)、动态绑定 

1bc5541b0ec2442bb6b5c4608a94cd4e.png

1b10c08c4d5a4dc08eec84a977868526.png

2924927b5b9c4400a9129d1d1970e0b3.png

四、异常捕获的原理

e6fdcbc509e4486e9e72493731324fa5.png

b28eb80bb7a143788022dc08164c0f4e.png

767e4de8706e477196d42003ca94a1d9.png

01a50f34bd9a4fe696deae2d48a87b55.png

finally

256c786e4cf247bda0a45ab9d2892e9f.png

9c2a2640ed04410da1c8300bc1966aaa.png

五、JIT即时编译器

(一)、简介

e785de0d0429406cb2e19f4c7f283966.png

8cbc8f35c58f49b28a1446d592a461a4.png

42f3cd39d9744a7b9f49672e11ae5116.png

 9f8ecf59472b4aceb6570f5ff401832a.png

(二)、方法内联

9a4968255ee14c5ea59fe31d6a83c53e.png

a8c186ce121b4e7e96ca3c72272c733b.png

(三)、逃逸分析

4c70b78acf75493ba2daec9b058b46ae.png

7d60866ef6224d89976d96a1be0a4672.png

9b7564d5ac1f45ce952e1fbe9ae1fb71.png

(四)、总结

e2c89c8c185a4537949af7059bc75317.png

六、垃圾回收器原理

(一)、G1

1、年轻代回收

ff99fcb322804cb0b17d6a8c59ddbb52.png

 9bd7ee4e813e4cae8654d059c8a52012.png

2bbbd33a2522432987045e70bc58cb45.png

8e804f69a29a4ed0ad24ce31c2ec5193.png

2c3a074ab7d04a0ea21ceda58a22b113.png

2、混合回收

7f07255b08164d10a6a63a8950e03788.png

6b635844968b477b96866a68aeb4fcdb.png 874ce7f786204c64a0ce9f956ce73d1b.png

b16f66ec5eb6461ba5a1ce27475f902a.png

4f753cf6b91a48f1b575ac657a794a95.png

9df6b5cb1f6b40eb86c56b1863fdf426.png

(二)、ZGC

7b3d1718dc6040f3be82710e7b2bab6f.png

80157dcbf11144bd9818d0f32d001d41.png 

(三)、ShenandoahGC

54905249a5374115b8e5d4f8e0c5d767.png

0142aceecae64a47802164153c777e8c.png

856d38bb2fcc453d873dcdbb63881d51.png

10ed2af644f74d86884424ef23edef2a.png

31e94eb44c92477e9c371415ccd8318f.png

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值