小结:

1、GC和程序处理的本质是无关的;

2、增量回收:预测和控制GC所产生的中断时间;

1、

分代回收

GC和程序处理的本质是无关的,因此它所消耗的时间越短越好。分代回收的目的,正是为了在程序

运行期间,将GC所消耗的时间尽量缩短。

基本思路

利用了一般性程序所具备的性质,即大部分对象都会在短时间内成为垃圾,而经过一定时间依然存活的

对象往往拥有较长的寿命。如果寿命长的对象更容易存活下来,寿命短的对象则会被很快废弃,那么到底

怎样做才能让GC变得更加高效呢?

如果对分配不久,诞生时间较短的“年轻”对象进行重点扫描,应该就可以更有效地回收大部分垃圾。

在分代回收中,对象按照生成时间进行分代,刚刚生成不久的年轻对象化为新生代(young generation)

,而存活了较长时间的对象化为老生代(old generation)。根据具体实现方式的不通,可能还会划分更多的代。

只扫描新生代对象的回收操作,被称为小回收(minor GC)。

随着程序的运行,老生代区域中的“死亡”对象也在不断增加。为了避免这些死亡的老生代对象白白占用内存空间,

偶尔需要对包括老生代区域在内的全部区域进行一次扫描回收。像这样以全部区域为对象的GC操作被称为

完全回收(full GC)或者大回收(major GC)。

分代回收通过减少GC中扫描的对象数量,达到缩短GC带来的平均中断时间的效果。

不过由于还是需要进行大回收,因此最大中断时间并没有得到什么改善。

从吞吐量来看,在对象寿命假说能够成立的程序中,由于扫描对象数量的减少,可以达到非常不错的成绩。

但是,其性能会被程序行为、分代数量、大回收触发条件等因素大幅度左右。

2、

增量回收

在机器人的姿势控制程序中,如果因为GC而让控制程序中断了0.1秒,机器人可能摔倒。

或者,如果车辆制动控制程序因为GC而延迟响应的话,后果也是不堪设想的。

在这些对实时性要求很高的程序中,必须能够对GC所产生的中断时间做出预测。例如,可以将

“最多只能中断0.01秒”作为附加条件。

在一般的GC算法中,作出这样的保证是不可能的,因为GC产生的中断时间与对象的数量和状态有关。

因此,为了维持程序的实时性,不等到GC玩不完成,而是将GC操作细分成多个部分逐一执行:增量回收 incremental GC

由于增量回收的过程是分步渐进式的,可以将中断时间控制在一定长度之内。另一方面,由于中断操作需要消耗一定的时间,

GC所消耗的总时间就会相应增加,正所谓有得必有失。

3、

并行回收

并行回收可以可用多CPU的性能,尽可能让这些GC任务并行(同时)进行。

垃圾回收GC3种算法的衍生品 增量回收:预测和控制GC所产生的中断时间的更多相关文章

  1. java垃圾回收几种算法

    1.引用计数法 2.标记——清除法 3.标记——整理算法 4.copying算法 5.generation算法(新生代.老年代.持久代) 详情参考:深入理解 Java 垃圾回收机制

  2. jvm 垃圾回收机制和算法(转)

    stop-the-world 在学习Java GC 之前,我们需要记住一个单词:stop-the-world .它会在任何一种GC算法中发生.stop-the-world 意味着JVM因为需要执行GC ...

  3. JVM(四)垃圾回收的实现算法和执行细节

    全文共 1890 个字,读完大约需要 6 分钟. 上一篇我们讲了垃圾标记的一些实现细节和经典算法,而本文将系统的讲解一下垃圾回收的经典算法,和Hotspot虚拟机执行垃圾回收的一些实现细节,比如安全点 ...

  4. JAVA垃圾回收-可达性分析算法

    在java中是通过引用来和对象进行关联的,也就是说如果要操作对象,必须通过引用来进行.那么很显然一个简单的办法就是通过引用计数来判断一个对象是否可以被回收.不失一般性,如果一个对象没有任何引用与之关联 ...

  5. 【JVM】垃圾回收的四大算法

    GC垃圾回收 JVM大部分时候回收的都是新生代(伊甸区+幸存0区+幸存1区).按照回收的区域可以分成两种类型:Minor GC和Full GC(MajorGC). Minor GC:只针对新生代区域的 ...

  6. java垃圾回收机制--可达性算法

    先说一些题外话,Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区,这些区分为线程私有区和线程共享区 1.线程私有区 a.程序计数器 记录正在执行的虚拟机字节码指令地址 ...

  7. 深入JVM-垃圾回收概念与算法

    一.认识垃圾回收 谈到垃圾回收(Garbage Collection,简称GC),GC中的垃圾,特指存在于内存中的.不会再被使用的对象.对于内存空间的管理来说,识别和清理垃圾对象是至关重要的. 二.常 ...

  8. jvm高级特性(2)(判断存活对象算法,finaliza(),方法区回收)

    JVM高级特性与实践(二):对象存活判定算法(引用) 与 回收 垃圾回收器GC(Garbage Collection) 于1960年诞生在MIT的Lisp是第一门真正使用内存动态分配和垃圾收集技术的语 ...

  9. 「每日五分钟,玩转JVM」:两种算法

    前言 上篇文章,我们了解了GC 的相关概念,这篇文章我们通过两个算法来了解如何去确定堆中的对象实例哪些是我们需要去回收的垃圾对象. 引用计数算法 引用计数法的原理很简单,就是在对象中维护一个计数器,当 ...

随机推荐

  1. 阿里云 ssh 登陆请使用(公)ip

    一直以为要要登陆使用的是私有的ip,最后才发现是使用共有ip, 如图 47.52.69.151 > ssh root@47.52.69.151 > 输入密码

  2. css + div 列表布局

    常见列表布局,效果如下图.常见图与图之间经常会留间距,下图图与图没留间距 1.第一种列表布局:float + margin 1.2.第一种列表布局相应代码 <!DOCTYPE html> ...

  3. 基于jQuery图片遮罩滑动文字切换特效

    基于jQuery图片遮罩滑动文字切换特效.这是一款jquery hover鼠标滑动选项卡切换透明背景遮罩文字显示特效.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div ...

  4. 小patch(psu)的打法 -- 实例

      从patch中的readme来. bug:10214450     测试数据:   SQL> create table t (t timestamp); Table created. SQL ...

  5. redis竞汰数据同步问题解决

    Redis 面试的时候遇到过问Redis是如何解决“竞态条件”的,相关知识点总结一下. 乐观锁 所谓竞态条件,举个例子,一个代表点击数的数值hitcount,每个客户点击一次则+1. 没有事务的时候, ...

  6. 【30集iCore3_ADP出厂源代码(ARM部分)讲解视频】30-4 底层驱动之ADC、DAC

    源视频包下载地址:链接:http://pan.baidu.com/s/1cL37gM 密码:ys1l 银杏科技优酷视频发布区:http://i.youku.com/gingko8

  7. bootstrap 3.0 LESS源代码浅析(一)

    我一直以为Bootstrap的LESS源代码精髓在mixins.less,所以这个系列主要也是讲解mixins.less的. 什么是mixins? 混入,或者翻译成混合.官网的说法是:我们可以定义一些 ...

  8. EntLib 自动数据库连接字符串加密

    const string provider = "RsaProtectedConfigurationProvider"; Configuration config = null; ...

  9. Java如何计数字串中的一组词组?

    在Java编程中,如何计数字串中的一组词组? 以下示例演示如何使用regex.Matcher类的matcher.groupCount()方法来计算字符串中的一组词组. package com.yiib ...

  10. (实用)pip源

    Pypi官方源网站的连接速度实在慢点出奇,可以更换为豆瓣的源 vim ~/.pip/pip.conf 添加如下内容即可: [global]index-url=http://pypi.doubam.co ...