Eden:
含义:伊甸园(The garden of Eden)
Survivor:
含义:幸存者
GC:
含义:Garbage Collection
Stop the world event
含义:地球停转事件,简称STW,即在执行垃圾收集算法时,Java应用程序的其他所有除了垃圾收集收集器线程之外的线程都被挂起
为什么java的垃圾回收里会使用这几个名词来作为堆内存的名称呢?
《创世纪》里的几个小故事:
上帝创造人类
上帝花了六天时间去创造万物,在第六天他按照自己的形象创造出人类(亚当),后来他感觉亚当一个人有点孤独,于是使用亚当的一根肋骨创造出了夏娃。并且把他们和很多动物植物都放在一个叫做伊甸园(The garden of Eden)。
亚当夏娃偷吃善恶果
上帝告诉亚当和夏娃不要偷吃善恶树上的果子,但是在撒旦的诱惑下他们还是偷吃了,于是上帝把他们赶出了伊甸园。
该隐和他的弟弟
亚当和夏娃有两个儿子,一个叫该隐,一个叫亚伯。该隐因为一件事嫉妒亚伯,把自己的弟弟亚伯给杀了。
诺亚方舟
上帝感到人类的罪恶深重,于是他决定来一次大清洗,他的办法很简单——使用洪水(GC)。在这之前他让诺亚造了一个大船(诺亚方舟),在洪水来到的时候登上船的人和动物都没有死去(Survivor)。这些人和动物都开始重建家园。
再来看看java的堆内存:
《创世纪》和JVM的对于关系
如果把《创世纪》中的人和动物比作JVM堆内存中的对象的话,还是列个表:
《创世纪》 | JVM |
---|---|
伊甸园(The garden of Eden) | Eden区 |
诺亚方舟(Noah’s Ark) | 两个Survivor区 |
诺亚(Noah) | GC算法 |
大洪水(The flood) | 一次Minor GC ——Stop the World event(地球转事件) |
幸存的人和动物 | 从Eden区进入Survivor区的对象 |
被大洪水消灭的人和动物 | 被GC回收的对象 |
这么一看这些比喻还是非常恰当的。