zoukankan      html  css  js  c++  java
  • 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

     
  • 相关阅读:
    centos设置系统时间
    ubufntu 11.10启动不了nautilus的问题解决
    centos中用crontab定时执行java程序
    试用ubuntu里画流程图,架构图工具
    内嵌在客户端的网页出现刷新问题
    lenovo e23在ubuntu下打开无线网卡的办法
    mysql workbench for ubuntu测试
    有关Java多态
    我是程序猿,一个新的开始......
    有关数组的几种排序
  • 原文地址:https://www.cnblogs.com/luangeng/p/6033994.html
Copyright © 2011-2022 走看看