注意类的符号引用是在常量池里面的还有字面量也是。
基本的数据类型是默认值,抽象的数据据类型是空。
new的时候:调用构造方法。
如何分配内存?
---分配内存的策略:
堆是不连续的,假设堆是连续的。
1.指针碰撞
2.虚拟机维护列表记录哪些是空闲的,空闲列表
垃圾回收带垃圾整理就是指针碰撞否则是空闲列表。
--------
高并发同一时刻多个对象分配内存会有线程安全的问题。
1.线程同步
2.本地线程分配缓冲:每个线程操作不同的区域。
执行构造方法(包括执行代码块等等)
new会调用构造方法。
------------------------------------------29-----------------------对象的创建----------------------------------------------------------
对象在内存中分为三块 对象头 实例数据 对齐填充
-------
对象头Header:存储的是对象的元数据。
1)自身运行的数据(MarkWord):
1.hash值---
是native方法。
2.GC分代年龄:分代收集算法。---
https://blog.csdn.net/u012998254/article/details/81635902
3.锁状态标准---
4.线程持有的锁---
5.偏向线程ID---
6.偏向时间戳---
2)类型指针
对象指向类的元数据区分是哪个类的实例,这个存在堆里指向方法区。
其他:数组对象还会存储数组的长度的。
--------
InstanceData:我们看的最多的地方
分配的策略,相同宽度的字段分配在一起。
--------
padding:
占位符。对象的起始地址对象的大小是8个字节的整数倍。
--------------------------------------------------30-------------------------------对象的探究-------------------------------------------
java要听过栈的reference数据操作堆上的对象。
直接指针:直接找对象,速度快。
使用句柄:指向句柄池找到对象。
使用句柄池:在栈里面句柄地址是不变的。
HotSpot是直接地址。
知识点:https://blog.csdn.net/qq_41285600/article/details/82798331
句柄池:实例的指针 对象类型的指针。对象类型在方法区中。
-------------------31----------------对象的访问定位-----------------