Java 请问 -XX:+UseCompressedOops -XX:+UseCompressedOops 开启后少掉 4byte 不产生坏影响的原因是?

2020-03-30 21:19:34 +08:00
 Newyorkcity
64 位的操作系统,所以地址是 64bit 的,我觉得很有道理。。

可开启这个选项后给压成了 32 bit 的,那 32bits 的信息不就丢失了嘛?怎么还可以准确定位呢?

谢谢解答
2027 次点击
所在节点    Java
4 条回复
127000
2020-03-30 21:30:12 +08:00
一个 Java 对象到底占用多大内存?
cnblogs.com/zhanjindong/p/3757767.html
lcj2class
2020-03-30 22:02:27 +08:00
object 在 hotspot jvm 中是 8 字节对齐,也就是说对象地址用二进制表示,最后三位都是 0,很明显这是没必要存储的,压缩指针干的就是这件事。32 位地址最多可以表示 4G 的内存空间,用到压缩指针上,就能表示 4G * 8 = 32G 内存
Newyorkcity
2020-03-31 00:27:35 +08:00
@lcj2class 谢谢解答,后三个 bits 都是 0 可以扔掉不要我是能理解的... 后面我没太看懂,勉强理解的话意思是

因为 jvm 的堆大小有限,用 32bits 就足够标识了甚至还多了 -> 32bits 有 2^32-1 * 8bytes 的空间,已经远远大于常见 JVM 堆内存了

是这样么?
lcj2class
2020-03-31 12:47:39 +08:00
@Newyorkcity 可以这么理解

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/657720

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX