• Java基础--垃圾回收GC


    GC:

    垃圾回收由JVM中GC线程监控和执行。

    参考: http://www.oracle.com/technetwork/java/gc-tuning-5-138395.html

    GC算法:

    1. 标记清除法

    首先从根节点开始遍历所有对象,标记出被引用的对象,然后遍历堆,释放所有未标记的对象,会产生内存碎片。

    2.复制法

    将内存划分为大小相等的两块,开始只使用其中的一块,当这块耗尽之后,将存活的对象复制到另外一块,重新分配地址,然后全部清理这块。

    3.标记整理算法

    在标记清除的基础上移动存活对象,并更新引用指针,避免产生内存碎片。

    分代回收

    虚拟机对内存进行分代管理
    MinorGC是对Young Generation内存区的GC,速度较快且频繁。
    MajorGC是对Old Generation内存区的GC,速度较慢,会使应用程序挂起,也称FullGC。
    大多数对象生命期很短,在Eden区域中创建和销毁。当Eden内存区域耗尽时,GC线程进行一次MinorGC。
    MinorGC时将Eden区域的对象移动到一块Survivor区域和Old区。
    某些需要大量连续空间的对象会直接在老年代中分配,XX:PretenureSizeThreshold参数可控制这些大对象的阈值。
    jvm为每个对象内存定义age,age每经过一次新生代GC便加1。
    当对象的age达到一个阈值时,该对象会被移动到Old区,该阈值可由-XX:MaxTenuringThreshold设置,默认15。
     
     
    GC种类:
    根据不同内存区域,有不同的垃圾回收器。Young区有:Serial Collector,ParNew Collector,Parallel Scanvenge Collector。Old区有:Serial Old Collector,Parallel Old ollector,CMS Collector。

    1.serial collector  单线程收集器

    使用单线程去完成所有的gc工作
    Client模式下默认
    可用-XX:+UseSerialGC强制使用

    2.parallel collector  并行收集器

    使用多线程的方式,利用多CUP来提高GC的效率
    主要以到达一定的吞吐量为目标
    Server模式下默认
    --YGC:PS FGC:Parallel MSC
    可用-XX:+UseParallelGC或-XX:+UseParallelOldGC强制指定
    --ParallelGC代表FGC为Parallel MSC
    --ParallelOldGC代表FGC为Parallel Compacting
    优点:高效
    缺点:当heap变大后,造成的暂停时间会变得比较长

    3.concurrent collector

    并发收集器
    使用多线程的方式,利用多CUP来提高GC的效率
    并发完成大部分工作,full gc pause短
    可用-XX:+UseConcMarkSweepGC强制指定
    缺点:
    1.会产生内存碎片
    2.回收的整个耗时比较长
    3.和应用争抢CPU

     
  • 相关阅读:
    mongodb的热备工具pbm-agent
    注释
    mongodb的启动配置查询serverCmdLineOpts
    副本集状态
    分片集群的serverStatus监控
    副本集的replSetGetStatus监控
    京东
    副本集的replSetGetConfig监控
    mysql的replace函数
    副本集的serverStatus监控
  • 原文地址:https://www.cnblogs.com/luangeng/p/6033994.html
Copyright © 2020-2023  润新知