堆上的缓存区不是共享的
对象没有发生逃逸:对象在方法块中出生与消亡:此时的对象没有在堆上出生,而是优化为在栈上出生与死亡
堆空间结构
堆空间分为新生代与老年代,永久代虽然属于堆空间,但是目前调优不能影响到它
默认新生代与老年代的比例为1:2
新生代内 伊甸园:幸存者0:1 = 8:1:1,但是在Visual VM中显示为6:1:1
自适应内存分配策略:UseAdaptiveSizePolicy
要想是8,需要显示的赋值为8
几乎所有的对象都是在伊甸园中被创造,但是当伊甸园区满的时候有可能在老年区被创造;
当伊甸园与幸存者1堆满的时候,触发一YGC,标记整理算法,移动到幸存者2区,此时2区也无法存放,直接存储到老年区,此时老年区堆满,触发Fgc,如果此时还放不下,OOM错误
GC
MinorGC年轻代
MajorGC老年代
FullGC整堆收集
堆中的线程私有部分TLAB
(进程之间的通信,线程安全问题)
逃逸分析默认已经开启了
同步省略
没用的锁,没用的同步操作就会省略优化
没有逃逸的对象会被打散在栈上
结论,对象是否都是在堆上的
:逃逸分析,但是没有逃逸的在栈上,但是标量替换了,所以都可以进行解释
:栈上分配,同步省略与标量替换
总结,堆上的空间分配,GC,TLAB(线程私有部分),对象逃逸分析