zoukankan      html  css  js  c++  java
  • GC垃圾回收器和回收算法

    GC垃圾收集算法
    
    堆空间
    
    分代:
    
    年轻代:
        Eden区: 对象创建的区域: gc最频繁,99%的对象都是在这里创建和销毁的,经过一次youngGC,Eden区基本就空了
        Survival区:
            from: 经过一次youngGC,Eden和to区还存活的对象放入from区, from和to区角色互换
            to:  经过一次youngGC,仍然存活的对象和Eden区存活对象一起放入from区,并把存活足够久的对象[默认是15次youngGC]转入老年代
        
        三者占用内存比例:
        Eden:from:to=8:1:1
    
    老年代:
        年老代里存放的都是存活时间较久的,较大的对象,因此年老代使用标记整理算法。当年老代容量满的时候,会触发一次Major GC(full GC),回收年老代和年轻代中不再被使用的对象资源。
    
    永久代: jdk1.8叫元空间
    
    
    
    
    GCRoot:
        1、虚拟机栈中引用的对象!(局部变量表引用的对象)
        2、类中静态属性引用的对象
        3、方法区中的常量
        4、本地方法栈中 Native 方法引用的对象!
    
    
    垃圾收集器:
    
    young:
        DefNew: serial
        ParNew: parNew
        PSYoungGen: parallelScavenge
    
    old:     
        Tenured: serialOld
        ParOldGen: parallelOld
        cms: 已经弃用
    
    young+old: 
        G1垃圾回收器:
            jdk9开始作为默认的垃圾收集器 
            特点: 
                1, 高吞吐量+低延迟
                2, 避免内存碎片
                3, 支持大堆,一个收集器解决堆内存的回收
                4, 可预测的停顿时间
    
    ZGC: 新一代的GC,jdk14开始支持. 低延迟
  • 相关阅读:
    百度网盘下载太慢,试试阿里云网盘?
    linux使用过程中遇到的常见问题
    vscode设置护眼色
    为什么程序员互相之间不能透露薪水?
    机器学习:支持向量机(SVM)
    Java多线程总结(三)
    Java多线程总结(二)
    Java多线程总结(一)
    8.多线程--避免活跃性危险
    7.多线程--线程池的使用
  • 原文地址:https://www.cnblogs.com/alenblue/p/12890331.html
Copyright © 2011-2022 走看看