1.对象如何定位的

1.句柄方式

2.直接指针方式

对象怎么定位?对象怎么分配?_垃圾回收

一个直接寻址:访问速度快
一个是间接寻址:垃圾回收起来比较稳定

第二个比如如果是G1垃圾回收器的话,垃圾回收会进行垃圾的复制。会将垃圾移到另一个位置。如果用直接指针的方式的话就会发现T来回发生变化,效率低,所以句柄方式,GC回收比较稳定

句柄方式:
第一个指针是真正new出来的对象 第二个指针是类型数据指针

2.对象怎么分配

对象首先会尝试在栈上分配,在栈上的对象有一个好处,进行垃圾回收的时候不需要垃圾回收器处理,直接就弹出去了

对象怎么定位?对象怎么分配?_句柄_02

如果对象很大的话,就会分配放入老年代,需要FGC才能回收

对象怎么定位?对象怎么分配?_垃圾回收_03
TLAB: ThreadLocalAllocationBuffer 线程本地分配

在多个线程同时new对象的时候,新对象都会存储在Eden区,这个时候就会产生争夺资源的情况,所以我们需要对线程进行同步优化:
我们在Eden中为每一个线程开辟了一个很小的空间,默认是1%,叫做线程私有ThreadLocalAllocationBuffer ,这样就不用同步,不会争夺资源

然后新生代的Eden区会进行垃圾清除GC,被清除了,就直接删除了,没有清除就进入幸存者 S1区,然后经过多次GC,看AGE到了没有,够age了就进入老年区

对象怎么定位?对象怎么分配?_jvm_04