zoukankan      html  css  js  c++  java
  • JVM-垃圾回收

     
     常见的垃圾回收算法:
    1. 引用计数法 : 无法解决循环引用的问题
    2.标记清除算法:从根节点开始标记引用的对象,未被标记引用标记的对象可以被清除。
            解决了循环引用的问题。但是效率较低,标记和清除都要遍历所有对象。GC时,需要停止应用程序(否则可能导致标记不准确)。碎片化严重。
    3.标记压缩算法:标记同“标记清除算法”,清理是将存货的对象压缩到内存的一端。
            解决了碎片化的问题。但对象需要移动内存位置,对效率有影响
    4.复制算法:将内存空间一分为二,GC时,将存货对象复制到另一个空间,将该内存情况,交换两个内存的角色。适用于垃圾对象比较多,复制的对象比较少的时候。内存使用率低,最大50%。
             JVM年轻代内存空间就是用的这种算法。GC时,Eden区存货对象被复制到To,from中达到一定阙值的对象被复制到老年代中,没有达到阙值的被复制到to区。from和to交换角色。GC会一直这样重复,知道to被填满,会将所有对象移到老年代中。
    5.分代算法:根据回收对象的特点进行选择,年轻代适合复制算法,老年代适合标记清除或标记压缩算法。
    垃圾收集器
    1.串行垃圾收集器 : 使用单线程进行垃圾回收。垃圾回收时,java应用中的线程都要暂停,等待垃圾回收的完成(STW,stop the world)。不适合java web应用。
     -XX:+UseSerialGC : 新生代和老年代都用串行垃圾收集器
     -XX:+PrintGCDetails : 打印垃圾回收的详细信息
     
    2.并行垃圾收集器:单线程变成多线程,速度更快些,应用暂停的时间更短些。
      2.1 ParNew垃圾收集器: 工作在新生代   -XX:+UseParNewGC(新生代使用ParNew,老年代使用串行垃圾收集器)
      2.2 ParallelGC收集器
     
    前三个参数相对比较常用
    3. CMS垃圾收集器
     
    4. g1垃圾收集器
     

    可视化分析工具 : GCeasy

  • 相关阅读:
    NSIS实现ArcEngine Runtime安装和自动注册
    .Net平台下开发中文语音应用程序(转载)
    NSIS:判断并安装.NET Framework的例子(转载)
    教你如何将IPHONE恢复正常(转载)
    C# SendMessage WPARAM大全 (收集)
    关于开发WPF的一些感想
    C#版本的CPU性能测试
    ITTC数据挖掘平台介绍(二) 微博数据挖掘和分析
    [XMOVE自主设计的体感方案] XMove 4.0 无线组网协议
    [XMOVE自主设计的体感方案] XMove 4.0节点介绍——抽象节点和硬件
  • 原文地址:https://www.cnblogs.com/yintingting/p/8893880.html
Copyright © 2011-2022 走看看