GC算法-标记整理

算法详解

标记/整理算法与标记/清除算法非常相似,它也是分为两个阶段:标记和整理。

标记:它的第一个阶段与标记/清除算法是一模一样的,均是遍历GC Roots,然后将存活的对象标记。

整理:移动所有存活的对象,且按照内存地址次序依次排列,然后将末端内存地址以后的内存全部回收。
[……]

继续阅读

GC算法-分代搜索

算法详解

与其说分代搜集算法是第四个算法,不如说它是对前三个算法的实际应用。

对象分类

根据对象的不同特性,内存中的对象按照生命周期的长短大致可以分为三种:

1、夭折对象:朝生夕灭的对象,通俗点讲就是活不了多久就得死的对象。例子:某一个方法的局域变量、循环内的临时变量等等。


[……]

继续阅读

GC算法-复制

算法详解

我们首先一起来看一下复制算法的做法,复制算法将内存划分为两个区间,在任意时间点,所有动态分配的对象都只能分配在其中一个区间(称为活动区间),而另外一个区间(称为空闲区间)则是空闲的。

当有效内存空间耗尽时,JVM将暂停程序运行,开启复制算法GC线程。

接下来GC线程会将活动区间内的存活对象,全部复制到空闲区间,且严格按照内存地址依次排列,与此同时,GC线程将更新存活对象的内存引用地址指向新的内存地址。
[……]

继续阅读

GC算法-标记清除

算法详解

标记/清除算法是GC算法中最基础的算法。它的做法是当堆中的有效内存空间(available memory)被耗尽的时候,就会停止整个程序(也被称为stop the world),然后进行两项工作,第一项则是标记,第二项则是清除。

具体内容如下:

[……]

继续阅读

怎么取出黑球的概率最大

问题描述

黑球50,白球50,放进两个袋子里,一次只能取出一个球,要取出黑球的概率最大,应该怎么放?

答案:一个袋子放1个黑球,余下99个球放另一个袋子

[……]

继续阅读

快速排序详解

基本思想

1.先从数列中取出一个数作为基准数。

2.将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边(分区过程)。

3.再对左右区间重复第二步,直到各区间只有一个数。

算[……]

继续阅读

快速排序时间复杂度

快排的时间复杂度计算有很多种方法,规范的有数学主定理公式进行证明。这里简单通俗讲下O(n*logn)复杂度是怎么得出的。

在最优情况下,快排的每次划分都很均匀,假设有n个关键字,完整的排序需要T(n)[……]

继续阅读

Java阻塞队列BlockingQueue

什么是阻塞队列

阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加操作支持阻塞的插入和移除方法。

1)支持阻塞的插入方法:意思是当队列满时,队列会阻塞插入元素的线程,直到[……]

继续阅读