java_JVM之GC

GC的作用域

GC分类:

  次数上频繁收集的Young区(新生代):Minor GC

  次数上较少收集Old区(老年代):Full GC

  基本不动Perm区(永久代),在java8后更改为Metaspace(元空间)

 

1、垃圾回收四大算法

  1.1、引用计数法:有对象被引用了,则GC不进行垃圾回收;

  1.2、复制算法(Copying):发生在Young区,Minor GC使用的就是复制算法;

  1.3、标记清除(Mark-Sweep):发生在Old区,Full GC一般由标记清除或者标记清除与标记压缩混合实现;

  1.4、标记压缩(Mark-Compact):发生在Old区,Full GC一般由标记清除或者标记清除与标记压缩混合实现;

 

  以及:标记清除压缩(Mark-Sweep-Commpart);

 

 

2、什么是垃圾?

  简单来说,就是内存中已经不再被使用到的空间,就是垃圾;

  2.1、要进行垃圾回收,如何判断一个对象是否可以被回收?

    2.1.1、引用计数法:

 

    2.1.2、枚举根节点做可达性分析(根搜索路径)

  2.2、哪些可以作为GC Roots对象呢?

    

 

3、GC垃圾回收器

  GC算法(引用计数、复制、标记清理、标记整理)是内存回收的方法论,

  垃圾收集器就是算法落地的实现;

 

  目前没有完美的收集器出现,更加没有万能的收集器,只是针对具体应用最合适的收集器,进行分代收集;

1

  3.1、4种主要垃圾收集器

      Serial:串行回收:

        它为单线程环境设计且只使用一个线程进行垃圾回收,会暂停所有用户线程,所以不适合服务器环境;

      Parallel:并行回收:

        多个垃圾收集线程并行工作,此时用户线程是暂停的,适用于科学计算、大数据处理首台处理等若交互场景;

      CMS:并发标记清除:

        用户线程和垃圾收集线程同时执行(不一定是并行,可能是交替执行),不需要停顿用户线程,适用于对响应时间有要求的场景;

      G1:G1回收器将堆内存分割成不同的区域然后并发的对其进行垃圾回收;

 

  3.2、默认的垃圾收集器

 

 

4、GC默认参数说明

  4.1、Server/Client模式说明:

 

5、GC回收器详解

  5.1、串行收集器 Serial

  

  5.2、并行收集器 ParNew

 

  5.3、并行垃圾收集器 Parellel

 

  5.4、Paralell Old

 

  5.5、并发标记清除收集器:CMS

    CMS执行四步:

      1、初始标记(CMS initial mark)

        

      2、并发标记(CMS concurrent mark)和用户线程一起

        

      3、重新标记(CMS remark)

        

      4、并发清除(CMS concurrent sweep)和用户线程一起

        

     CMS优缺点:

        优点:并发收集停顿低;

        缺点:

          1、并发执行,对cpu资源压力大;

            

          2、采用的标记清除算法会产生大量的内存碎片;

            

 

 

  5.6、串行GC:Serial Old

 

6、垃圾收集器的选择:

 

7、垃圾收集器之G1

  7.1、G1是什么?

  7.2、特点

 

posted @ 2021-03-25 17:38  DHaiLin  阅读(43)  评论(0编辑  收藏  举报