GC

作者: 远o_O | 来源:发表于2017-07-21 14:30 被阅读5次

1、谁是真正的垃圾。判断可触及性

image.png

2、JAVA采用可达性分析

  • 从GCRoots开始维护的有向图,进行搜索,如果一个对象没有直接或间接指向GCROOTS的引用,就是垃圾。注意对象不能是“可复活的”
  • GCRoots包括那些内容:Class、Thread、JNI、Stack...
  • 引用的强度,及其差别,soft:内存不足回收,因此不会导致oom。weak:发现就回收。
image.png image.png

3、GC算法

image.png
  • 卡表(Card Table):为更快的回收新生代而生,通过卡表,有选择性的扫描老年代来发现引用,根本原因:新生代回收频繁,老年代频率较低
image.png

四、如何晋升老年代

  • 老年对象进入老年代:对象的年龄由对象经历的GC次数决定。默认为15,当然可以自己配置。
  • 大对象进入老年代:一个大对象,新生代的eden区或survior区都无法放的下,会直接晋升到老年代。
image.png image.png

五、TLAB(Thread Local Allocation Buffer):是一个线程专用的内存分配区域。为加速对象分配而生。

  • 在多线程的情况下,可能会同时有多个线程(竞争)进行内存分配,因此需要保持同步,而同步又会导致效率下降。因此JVM使用TLAB来避免多线程冲突,提高了对象的分配的效率。占用一段eden空间。
  • TLAB的启用是否,对对象的分配的影响还是比较大的。

六、JVM内存分配策略:开启栈上对象内存分配。

image.png

相关文章

网友评论

      本文标题:GC

      本文链接:https://www.haomeiwen.com/subject/zgwskxtx.html