JAVA 的垃圾回收机制

HotSpot虚拟机

分代收集

    在 java 堆区可以被分为 新生代(YoungGen) 和 老年代(OldGen), 新生代又细分为 Eden 空间, 
From Survivor空间, 和 To Survivor 空间.

       java 堆区内存图

垃圾标记: 根搜索算法

    以根对象集合作为起始,按照从上至下的方式搜索被根对象集合所连接的目标对象是否可达, 不可达说明
目标对象已经死亡.将其标记为垃圾对象

区域化分代式: G1(Garbage-Frist)收集器

将全堆扫描,改为堆内的块扫描.

    初始标记:
            标记 Root-Region
    根区域扫描:
            扫描 Root-Region 中引用的老年代的一些 Region 块(不会执行新生代内存回收,程序hang住)
    并发标记:
            找出整个 java 堆区中的存活对象(交叉执行新生代内存回收)
    再次标记:
            整个 java 堆区中存活对象标记(程序hang住)
    清除:
            计算活跃对象,并完全释放一些自由的Region块(程序hang住),然后处理
            Remembered Set(程序hang住), 并发重置一些空闲Region块,并放回至空闲列表.
    拷贝:
            将存活的对象,复制到未使用过的Region块中.(程序hang住)

results matching ""

    No results matching ""