jvm学习第三天

垃圾收集器与内存分配策略

垃圾收集器(GC [grabage collection])

GC做了什么事情

  1. 哪些内存需要回收

    1. 虚拟机栈,本地方法栈,程序计数器是属于线程私有的,随着线程创建而分配内存,线程结束自动清除。
    2. java堆和方法区
  2. 什么时候回收

  3. 堆中存放的是JAVA创建的实例对象,因此在回收之前必须确定哪些对象是“存活的”,哪些对象是“死亡的”,回收的时候,回收的就是“死亡对象”;

  4. 判断方法有两种:

    1. 引用计数法

      给对象一个引用计数器,每引用一次,计数器加1,失效的时候减1.只要引用计数器的值为0的时候,则说明该对象不会被使用了,进入“死亡”状态。就表示可以回收了。

      缺点:不能解决循环依赖

    2. 可达性分析法

      通过GC Roots作为起点开始往下搜索,当一个对象到GC Roots没有任何引用链的时候,则该对象不可达,那么就判定其为可回收对象。

      那么GC Roots是什么?

      可以作为GC Roots的对象包括四种,

      1. 虚拟机栈中的引用对象
      2. 方法区中静态变量引用的对象
      3. 方法区中常量引用的对象
      4. 本地方法栈中引用的对象

      引用分为四种

      引用类型被回收时间用途生存时间
      强引用从来不会对象的一般状态JVM停止运行时
      软引用内存不足时对象缓存内存不足时
      弱引用jvm垃圾回收时对象缓存gc运行后
      虚引用未知未知未知
  5. 方法区

  6. 一般不要求对方法去的垃圾进行回收,复杂度比较高,

  7. 怎么回收

    运用各种垃圾收集算法

    1. 标记清除算法
    2. 标记整理算法
    3. 复制算法
    4. 分代收集算法

垃圾收集器

串行收集器

并行收集器

  1. 年轻代

    1. serial

    最古老的,单线程的收集器,采用复制算法

    开启Serial收集器:-XX:+UseSerialGC, 与Serial Old搭配使用的运行过程如下图

      ![img](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9pbWFnZXMyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM1MDg0My8yMDE4MDcvMTM1MDg0My0yMDE4MDcwNDA3NDIzMzIxMC0xODcxMjQ3ODI4LnBuZw?x-oss-process=image/format,png) 
    
    1. parNew

    相当于Serial的多线程版本,采用复制算法

    开启方式:选择CMS(-XX:+UseConcMarkSweepGC)后默认的新生代收集器是ParNew,也可用-XX:+UseParNewGC命令指定为ParNew收集器。

    ![img](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9pbWFnZXMyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM1MDg0My8yMDE4MDcvMTM1MDg0My0yMDE4MDcwNDA4MDUwNTk0MS0xODk5MTExMDg1LnBuZw?x-oss-process=image/format,png) 
    
    1. parallel Scavenge

    多线程,并行的垃圾收集器,采用的算法是复制算法

    ![img](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9pbWFnZXMyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM1MDg0My8yMDE4MDcvMTM1MDg0My0yMDE4MDcwNDIwMjkwNjQ2NC0xMzEyNzM5NzM2LnBuZw?x-oss-process=image/format,png) 
    
  2. 老年代

    1. serial Old

    单线程的垃圾收集器,采用标记整理算法

    1. Parallel Old

    多线程的收集器,采用标记整理算法,注重吞吐量。

    1. CMS

    采用标记清除算法,STW时间短,并发收集

    收集过程

    1. 初始标记,会进行STW,在初始标记的时候只会标记GC Roots能够关联的对象,速度快。
    2. 并发标记
    3. 重新标记:修正并发标记期间因为用户线程继续运行而导致的标记产生变动的那一部分对象的标记记录。
    4. 并发清除。

    CMS收集器的内存回收过程是与用户线程并发执行的。

    缺点:

    1. 对CPU资源敏感
    2. CMS采用的是标记清除算法,造成大量的内存碎片对分配大对象不利
    ![img](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9pbWFnZXMyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTM1MDg0My8yMDE4MDcvMTM1MDg0My0yMDE4MDcwNDIxNTA1NDc2Mi0yMTQxMjAxOTA5LnBuZw?x-oss-process=image/format,png) 
    

img

G1收集器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值