对象怎么定位?对象怎么分配?"/>
对象怎么定位?对象怎么分配?
1.对象如何定位的
1.句柄方式
2.直接指针方式
一个直接寻址:访问速度快
一个是间接寻址:垃圾回收起来比较稳定
第二个比如如果是G1垃圾回收器的话,垃圾回收会进行垃圾的复制。会将垃圾移到另一个位置。如果用直接指针的方式的话就会发现T来回发生变化,效率低,所以句柄方式,GC回收比较稳定
句柄方式:
第一个指针是真正new出来的对象 第二个指针是类型数据指针
2.对象怎么分配
对象首先会尝试在栈上分配,在栈上的对象有一个好处,进行垃圾回收的时候不需要垃圾回收器处理,直接就弹出去了
如果对象很大的话,就会分配放入老年代,需要FGC才能回收
TLAB: ThreadLocalAllocationBuffer 线程本地分配
在多个线程同时new对象的时候,新对象都会存储在Eden区,这个时候就会产生争夺资源的情况,所以我们需要对线程进行同步优化:
我们在Eden中为每一个线程开辟了一个很小的空间,默认是1%,叫做线程私有ThreadLocalAllocationBuffer ,这样就不用同步,不会争夺资源
然后新生代的Eden区会进行垃圾清除GC,被清除了,就直接删除了,没有清除就进入幸存者 S1区,然后经过多次GC,看AGE到了没有,够age了就进入老年区
更多推荐
对象怎么定位?对象怎么分配?
发布评论