zoukankan      html  css  js  c++  java
  • jvm垃圾收集器总结jdk1.7

    内存
    ● 线程私有:程序计数器,虚拟机栈,本地方法栈
    ● 线程共享: 方法区,堆
    判断存活算法
    ● 引用计数法:无法解决循环引用问题。
    ● 可达性分析算法: 从GCRoot作为起始点,向下搜索,经过的路径成为引用链,当一个对象没有任何引用链相连(不可达时),则证明该对象不可用,进行第一次标记,如果第二次还不可用,则在gc时回收。
    可作为GcRoot的对象:
    ● 虚拟机栈中引用的对象。
    ● 方法区中类静态属性引用的对象
    ● 方法区中常量引用的对象
    ● 本地方法栈中JNI引用的对象
    Java引用类型:
    ● 强引用: 最普遍的,new出来的对象
    ● 软引用: 有用但非必须的对象,在oom时,进行回收
    ● 弱引用: 非必须的对象,下次gc时回收
    ● 虚引用:一个对象是否有虚引用完全不会对其生存时间构成影响,虚引用的唯一目的是能在这个对象被收集器时收到一个系统通知。
    回收方法区:
    方法区回收性价比低,主要回收两部分:废弃常量和无用的类。判断为无用的类条件:
    1.该类所有实例已经被回收
    2.加载该类的classloader已经被回收
    3.该类的java.lang.class对象没有在任何地方引用,无法通过放射访问该类的方法。
    垃圾收集算法

    1. 标记-清除算法:
      ● 先标记后回收
      ● 缺点:效率问题,标记和清除效率都不高,空间问题,清除以后会产生大量内存碎片
      2.复制算法:
      ● 将survivor(存活区)分两块,由于大部分对象(98%)都是"朝生夕死"所以将Eden区和正在使用的survivor区复制到另一个survivor区,eden:survivor 8:1左右。并且有老年区担保机制
      ● 适合于年轻代
      3.标记整理算法:
      ● 标记之后让存活对象往一端移动,清除另一段的无用对象
      ● 适合于老年代
      4.分代收集:
      ● 新生代采用复制算法,老年代采用标记整理算法

    Hotspot算法实现
    ● GCRoots:在oopmap的协助下,快速完成GCRoots枚举,oopmap只有在某些代码位置生成,在安全点(方法调用返回,可能异常点,循环跳转)中断进行回收。改进为安全区域(无引用关系变化
    垃圾收集器
    ● serial收集器:单线程收集器,stop the world,
    ● ParNew收集器:Serial多线程版本,能与cms搭配。
    ● Parallel Scavenge收集器:自适应调节策略,高吞吐量,多线程并行,
    ● CMS收集器:以获取最短回收停顿时间为目标的收集器。四个步骤:1.初始标记 2.并发标记,3.重新标记,4.标记清除。初始标记和重新标记需要停顿,这段时间较短, 并发标记和并发清除时间长,cms并发执行。
    缺点:无法处理浮动垃圾。内存碎片。
    ● G1收集器:
    1.并行与并发 2.分代收集 3.空间整合 4.可预测停顿。
    可用于新生代和老年代,内存中它们不再隔离。跟踪合个region里的价值大小维护优先列表,每次根据允许的收集时间,优先回收价值最大的region。

  • 相关阅读:
    算符优先分析
    自下而上语法分析
    递归下降语法分析
    LL(1)文法的判断,递归下降分析程序
    消除左递归
    4.K均值算法--应用
    2.机器学习相关数学基础
    K均值算法
    机器学习概述
    算符优先分析
  • 原文地址:https://www.cnblogs.com/zhengshiqiang47/p/8621050.html
Copyright © 2011-2022 走看看