JVM中young(年轻代)old(老年代)垃圾回收相关的知识

 GC【垃圾回收】  

 heap + metaspace 

 1.什么是垃圾? 
    没有引用指向的对象

GC: 
    一、哪些对象要被回收    which
    二、什么时候被回收       when
    三、采用什么方式回收    how

一、哪些对象要被回收    which(没有被调用的对象)
    1.引用计数法【了解】
        给对象添加了一个引用计数器,引用一次 +1 引用失效 -1 
        计数器0 说明这个对象可以被回收 (对象“已死”)

        缺点: 
            循环引用 ,会导致 这个对象回收不了 (以下是例子,说明一下)

            Obejcet a = new Object(); +1(被引用后+1)
            Obejcet b = new Object(); +1
            a.xxx=b  +1 
            b.xxx=a  +1
            a.xxx=b  +1 

            a =>2
            b =>3 

            a=null     a =>1
            b=null  b =>2 

     2.根节点可达性分析

           以“GCroot”作为起始点,从这些结点开始向下搜索,搜索所走到的路径称为(引用链),当一个对象到GCroot没有任何引用链时,则证明此对象是不可用的(被回收)。

            什么是GCroot?(是一个根对象,可以是方法区中类静态属性引用的对象,也可以是常量引用的对象等如下所示:)
                1.栈
                2.方法区
                3.native stack
二、采用什么方式回收?when +how
      1.理论:=》 gc算法 
      2.落地:=》垃圾收集器 

 gc算法: 
    1.标记清除: mark-sweep (效率更高)
        标记: 标记哪些对象要被清除【根节点可达性分析】
        清除:垃圾对象进行清除

        缺点: 内存碎片
        stop the world =》 stw 暂停应用

    2.标记整理: 
        标记: 标记哪些对象要被清除【根节点可达性分析】 进行清除
        整理:移动活的对象 进行内存整理

    3.复制:(内存浪费比较多)
        1.把内存分成大小相同的两片
        2.浪费了一些内存 
        3.没碎片

对象: 
    夭折:90% 
    老不死的:old   0-15(默认的,最好不要修改)  15 这个对象是足够的老
    不灭的:class 、pool

年轻代参数:
    -Xmnsize  =》 年轻代 
    XX:SurvivorRatio=ratio  =》 8:1:1 

垃圾收集器 :
    1.串行垃圾收集器
    2.并行垃圾收集器
    3.并发垃圾收集器
    4.G1垃圾收集器【比较复杂】

1.串行垃圾收集器
    1.一个线程处理垃圾回收
    2.stw  
        app=>gc=>app 

2.并行垃圾收集器
    1.多个线程处理垃圾回收
    2.比 串行垃圾收集器 stw时间短

3.并发垃圾收集器
    你的程序线程 和 gc线程 并发执行
    没有stw


分代算法: 
    年轻代  老年代
1.年轻代
    1.年轻代:串行 
        -Xms5m -Xmx5m -XX:+PrintGCDetails -XX:+UseSerialGC

        DefNew 年轻代 串行垃圾回收器
        Tenured 老年代 串行垃圾回收器打印

    2.年轻代:ParNew(并行)
        -Xms5m -Xmx5m -XX:+PrintGCDetails -XX:+UseParNewGC

        ParNew 年轻代 并行垃圾回收器
        Tenured 老年代 串行垃圾回收器打印

    3.年轻代:Parallel Scavenge(并发)  jinfo 

        -Xms5m -Xmx5m -XX:+PrintGCDetails -XX:+UseParallelGC

        PSYoungGen 年轻代 并发垃圾回收器
        ParOldGen 老年代 并行垃圾回收器

    注意: 
        可以从单单 一个方面入手 eg:年轻代  老年代的gc 就确定了

2.老年代

    1.老年代:串行 【用不了】(在Java源代码中找不到,说明老年代的串行匹配不到年轻代的垃圾回收器)
        -Xms5m -Xmx5m -XX:+PrintGCDetails -XX:+UseSerialOldGC【参数没有找到】
    

    2.老年代:Parallel old(并行)
        -Xms5m -Xmx5m -XX:+PrintGCDetails -XX:+UseParallelOldGC

        PSYoungGen 年轻代 并发垃圾回收器
        ParOldGen 老年代 串行垃圾回收器打印

    3.CMS(并发标记清除)
        1.目的 
            gc =》 停顿的时间比较短

        -Xms5m -Xmx5m -XX:+PrintGCDetails -XX:+UseConcMarkSweepGC

        ParNew 年轻代 并发垃圾回收器
        CMS 老年代 cms垃圾回收器

       

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值