volatile理解

看一段代码

1
2
3
4
5
6
7
8
9
10
11
12
13
class VolatileExample {
int a = 0;
volatile boolean flag = false;
public void writer() {
a = 1; //1
flag = true; //2
}
public void reader() {
if (flag) { //3
int i = a; //4
}
}
}

volatile 的作用是让一个变量是多线程可见的,并且对他的 get 和 set 是原子的。着重考虑前一点,后一点好理解。

Read more

在Regin间对象相互引用时G1如何完成Root-Tracing

在Regin间对象相互引用时G1如何完成Root-Tracing

假如在对一个 Region 进行 GC,称他为 S1,上面有一个对象 O1 需要进行可达性分析。 如果没有其他 Region 上的对象引用 O1,那么皆大欢喜, 只在 S1 上就能确定 O1 是否可达(不可达就是需要清理)。如果有其他 Region 上的对象引用 O1,如果还不只一个,那么处理起来就比较麻烦了,笨办法就是去遍历,这当然不是一个好办法。

Read more

可达性分析算法和CardTable

可达性分析算法

可达性分析算法是用来寻找堆中哪些对象是需要被回收哪些是存活用的。他的原理是选择一些根对象作为基础,从这些根对象出发需找这些对象引用的对象。在递归寻找子对象之后,就能行程一颗庞大的树。在这棵树上的对象都是存活的,不在这课树上的对象是需要清理的。

然后说 CardTable

CardTable 是一种 JVM 实现中用到的一种数据结构。CardTable 是一个字节数组,数组中的每一位表示年老代的某一区域中的所有对象是否持有新生代对象的引用。如果持有就是 1,如果不持有就是 0。

Read more

博客开张啦啦啦

从大学开始就鼓捣过个人博客,当时用的是GAE,当时就搭了个博客但是没有坚持更新文章,记得随便鼓捣了几篇没什么内容的小东西就基本废弃状态了。

最近越来越热衷写文档,公司的wiki用的飞起,文档也是越写越有心的而且也觉得很有必要。自己研究和总结的东西都一致记录在wiznote里,有些东西已经稍微够得上
博文的资格,所以就鼓捣出这个个人博客。:)

Read more