java对象分配
对象创建主要过程
new一个对象时,执行一个new指令
01 类加载检查
先检查类是否已经被加载过,如果没有先加载类。
02内存分配
然后再分配内存空间,通常有两种
-
指针碰撞(要求内存按序排列,分配时只是指针往后挪动)
-
空闲列表(有记录维护空闲块,找到合适大小的分配,并更新记录)
在多个线程并发分配的时候解决争抢问题,通常也有两种
-
cas(多线程争抢,需保证分配的原子性)
-
本地线程分配缓冲TLAB(Thread Local Allocation Buffer),提前在堆中为每个线程分配一块专属内存,线程分配时直接分配,避免争抢,jdk8默认使用TLAB方式。
03 初始化
内存分配完成,虚拟机将分配到的内存空间都初始化为零值(不包括对象头)。