指针碰撞是指,创建对象的时候创建完第一个对象,指针需要指向第二个地址来创建对象,如图
为什么是8:1:1 不是9:1,
新生代的宗旨是:希望98%的对象在minor gc的时候会被回收掉
为什么不是9:1 为什么不是7:1:1:1 其实就是让马上要到老年代的对象尽量让它待在新生代的时间多一点,但是7:1:1:1 的话太久了,8:1:1介于7:1:1:1和9:1之间比较合适。
躲过了一次major gc,而major gc时间是minor gc的十倍。major gc只对S1进行回收,也就是如果有s0的情况下,就算第一次minor gc了,major gc还是对其刚才minor gc的对象不起作用。
JVM可以手动调优,目标是所有对象都不进入老年代。
对象很大,直接进老年代,不需要在新生代搞来搞去
s1里面有个年龄,对里面的对象每次major gc的时候会计数,而这个年龄达到一定值会被放到老年代,这个年龄是可以设置的,方法:1改成15(默认值)
除了手动设置外,JVM也会动态地对年龄进行判断
在发生minor gc的时候,其实是不知道老年代是否装的下这些对象的,这个时候需要分配担保,
三种GC的概念:
Minor GC是新生代的GC eden-->s0或者s0-->s1
Major GC是s1到老年代
Full GC是Minor GC+Major GC
GC的各种算法的宗旨是减少full GC
Full GC何时触发???TODO
强软弱虚
强:在GC root不可达的时候,才会被回收
软:在下一次Full gc 的时候会被回收,场景譬如:缓存
弱:只要是GC就被回收
虚:标记哪些会被GC。。。。
为什么一级Full gc了,请求还能响应?TODO