如何划分内存
指针碰撞 - Bump the Pointer (默认)
如果Java堆内存中是绝对规整的, 用过的和没用过的内存中间放着一个指针作为指示器, 分配内存就是把这个指针挪动这个内存大小的距离
空闲列表 - Free List
如果Java内存不是规整的, 虚拟机就得维护一个空闲列表, 记录哪个内存块是可用的, 分配的时候划分一块区域给对象实例, 并更新列表上的记录
并发情况 (肯定会涉及到内存的争抢)
CAS - Compare And Swap
保证更新操作的原子性来对分配内存空间的动作进行同步处理
本地线程分配缓存 - Thread Local Allocation Buffer, TLAB
每个线程在Java堆中预先分配一小块内存
-XX:+/-UseTALAB -XX:TLABSize (默认EDEN 内存的 1%)
Mark Word 标记字段( 32 位 4字节)
自身运行时数据, 哈希值, GC分代年龄, 锁状态标志, 线程持有锁, 偏向线程ID, 偏向时间戳
Klass Pointer类型指针 类元数据的指针,虚拟机通过这个指针来确定这个对象是哪个类的实例。