阿里新规:换掉UUID,NanoID更快更安全

本文深入探讨了Java对象在内存中的分布,包括对象头的markword、对象属性、指针压缩等概念。通过示例展示了对象在不同情况下的内存占用,并解释了MarkWord中锁状态的标志。同时提到了64位系统中,启用指针压缩以应对内存空间和CPU缓存效率的问题。
摘要由CSDN通过智能技术生成

前言

new
openjdk
 <dependency>
     <groupId>org.openjdk.jol</groupId>
     <artifactId>jol-core</artifactId>
     <version>0.9</version>  
 </dependency>

对象分布

  • 首先我们得明确一个Java对象在内存中是什么样的结构。这里有人可能会说能有啥结构。就是内存数据二进制存储呗。这样的回答好像说了又好像没说。
  • 这里我们通过一个demo案例来具体讲解。首先我们系统中存在这么一个对象
 @Data
 public class User {
     private int age;
 }
  • 一个 User 对象仅有一个Int类型的属性。他在内存中不仅仅是表述int类型的数据。图中应为kclass point

  • 对于一个普通的Java对象就是上述的数据结构存储在内存中的。在64位系统中markword站8字节;klass point在不开启指针压缩的前提下占8字节,否则占位4字节;这里的内容就是我们对象中的属性,因为Java中属性都是有类型的而每种类型占位也是不一样的,比如上面我们int类型是占位4字节;至于补齐字节是啥意思呢?在64位中要求一个对象在内存中所占字节必须是8的倍数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值