美文网首页
2021-05-16 《Java 核心技术36讲》学习记录七

2021-05-16 《Java 核心技术36讲》学习记录七

作者: _笑口常开 | 来源:发表于2021-05-20 07:19 被阅读0次

    简述

    此文是对 第7讲 | int和Integer有什么区别? 的学习

    一些知识点/笔记点:

    • Java 的 8 个原始数据类型(Primitive Types,boolean、byte 、short、char、int、float、double、long)
    • 原始数据类型不是对象
    • 在 Java 5 中,引入了自动装箱和自动拆箱功能(boxing/unboxing),Java 可以根据上下文,自动进行转换为包装类
    • 因为大部分数据操作都是集中在有限的、较小的数值范围,所以 Java 5 中新增了静态工厂方法 valueOf,在调用它的时候会利用一个缓存机制,带来了明显的性能改进。
    • 自动装箱 / 自动拆箱是发生在什么阶段?自动装箱是一种语法糖,它们发生在编译阶段,也就是生成的字节码是一致的。
    • 代码验证编译阶段,用Javap -v 验证
    Constant pool:
       #1 = Methodref          #5.#14         // java/lang/Object."<init>":()V
       #2 = Methodref          #15.#16        // java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
       #3 = Methodref          #15.#17        // java/lang/Integer.intValue:()I
    
    
    • Integer 源码的学习:valueOf 缓存范围为-128 到 127; value 声明为 private final; 定义了类似 SIZE 或者 BYTES 这样的常量,考虑不同平台的移植。
    • 原始类型线程安全,并发保证或者使用 AtomicInteger、AtomicLong 这样的线程安全类

    扩展

    • OC 里面同样有这种原始类型数据和引用类型之间转换的问题
    • Java 对象
    • 对象由三部分组成,对象头,对象实例,对齐填充。
    • 其中对象头一般是十六个字节,包括两部分
    • 第一部分有哈希码,锁状态标志,线程持有的锁,偏向线程id,gc分代年龄等。
    • 第二部分是类型指针,也就是对象指向它的类元数据指针,可以理解,对象指向它的类。
    • Mark Word: 标记位 4字节,类似轻量级锁标记位,偏向锁标记位等。
    • Class对象指针:4字节,指向对象对应class对象的内存地址。
    • 对象实际数据:对象所有成员变量。
    • 对齐:对齐填充字节,按照8个字节填充。

    相关文章

      网友评论

          本文标题:2021-05-16 《Java 核心技术36讲》学习记录七

          本文链接:https://www.haomeiwen.com/subject/xpcejltx.html