1.概述
学习GC需要搞懂以下三个问题:
1.1 哪些内存需要回收
1.2 什么时候回收
1.3 如何回收
问题1
哪些内存需要回收,这个问题指向的就是堆空间当中存放着的对象实例,这一部分是可以动态变化的...,然后当这些对象被使用过后,就会把这些复制出来的全部都清除,优点就是运行高效,不必考虑内存碎片问题,(内存碎片在多个对象相互引用的过程中没有全部清除,最终产生内存碎片)缺点是会将整个堆内存空间缩小到原来的一半...:更有利于程序的长时间运行,分配大对象时不会因为无法找到连续的内存空间而提前触发了GC
4.可预测的停顿:可以设置垃圾收集的时间最大值不超过N毫秒
5.GI的执行过程
初始标记
并发标记
最终标记
筛选标记...对象分配原则
1.优先分配在新生代Eden区中,当Eden区当中空间不足时,触发Minor GC
2.大对象或者是长期存活调用频繁的对象会进入到年老代,当年老代空间不足时会触发Major GC,Major...GC的触发往往会伴随着一次Minor GC的发生,当Major GC触发之后就距离Full GC不远了,如果Full GC依旧不能解决问题,那么就会导致内存的溢出
3.从JDK1.8的版本开始,已经取消了永久代