V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Newyorkcity
V2EX  ›  Java

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

  •  
  •   Newyorkcity · 2020-03-30 21:19:34 +08:00 · 2041 次点击
    这是一个创建于 1726 天前的主题,其中的信息可能已经有所发展或是发生改变。
    64 位的操作系统,所以地址是 64bit 的,我觉得很有道理。。

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

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

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

    是这样么?
    lcj2class
        4
    lcj2class  
       2020-03-31 12:47:39 +08:00 via iPhone   ❤️ 1
    @Newyorkcity 可以这么理解
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2729 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 03:58 · PVG 11:58 · LAX 19:58 · JFK 22:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.