GC算法-标记整理
算法详解
标记/整理算法与标记/清除算法非常相似,它也是分为两个阶段:标记和整理。
标记:它的第一个阶段与标记/清除算法是一模一样的,均是遍历GC Roots,然后将存活的对象标记。
整理:移动所有存活的对象,且按照内存地址次序依次排列,然后将末端内存地址以后的内存全部回收。
[……]
For the things you love most
For the things you love most
标记/整理算法与标记/清除算法非常相似,它也是分为两个阶段:标记和整理。
标记:它的第一个阶段与标记/清除算法是一模一样的,均是遍历GC Roots,然后将存活的对象标记。
整理:移动所有存活的对象,且按照内存地址次序依次排列,然后将末端内存地址以后的内存全部回收。
[……]
与其说分代搜集算法是第四个算法,不如说它是对前三个算法的实际应用。
根据对象的不同特性,内存中的对象按照生命周期的长短大致可以分为三种:
1、夭折对象:朝生夕灭的对象,通俗点讲就是活不了多久就得死的对象。例子:某一个方法的局域变量、循环内的临时变量等等。
[……]
我们首先一起来看一下复制算法的做法,复制算法将内存划分为两个区间,在任意时间点,所有动态分配的对象都只能分配在其中一个区间(称为活动区间),而另外一个区间(称为空闲区间)则是空闲的。
当有效内存空间耗尽时,JVM将暂停程序运行,开启复制算法GC线程。
接下来GC线程会将活动区间内的存活对象,全部复制到空闲区间,且严格按照内存地址依次排列,与此同时,GC线程将更新存活对象的内存引用地址指向新的内存地址。
[……]
标记/清除算法是GC算法中最基础的算法。它的做法是当堆中的有效内存空间(available memory)被耗尽的时候,就会停止整个程序(也被称为stop the world),然后进行两项工作,第一项则是标记,第二项则是清除。
具体内容如下:
[……]
快排的时间复杂度计算有很多种方法,规范的有数学主定理公式进行证明。这里简单通俗讲下O(n*logn)[……]