技术人员也应懂艺术~~:不要把“老年代”叫成“Old Generation”
JAVA GC为了针对不同存活率场景采用不同的算法进行高效回收,采取了分代策略,通常是:“新生代(Young Generation)”和“老年代(Tenured Generation)”。但是看比较多的文章时,总发现把老年代Tenured Generation说成Old Generation,我想命名者看到他的别具匠心被这么亵渎估计要彻底崩溃~~。新生代中的专门用作存放新生对象的场所被称作为“伊甸园(Eden)”就早已看得出命名者是很有品味的雅士。再有把经过Minor GC洗礼后,还没被回收的对象称为“幸存者(survivor)”,难道我们就没发现命名者在使用比喻吗?!如果我们把“老年代(Tenured Generation)”叫成“Old Generation”不觉得有点狗尾续貂的惭愧吗?!<br><br>
我多少时间都在寻思,为啥命名者会命名为Tenured Generation?为啥我们就喜欢说成Old Generation?今天我终于明白了,Tenure 就是为比喻而生的。<br><br>
Tenure为啥也是在比喻呢?这得说说Tenure这个词。<br><br>
1. Thefreedictionary对Tenure的解释:http://www.thefreedictionary.com/tenure
第4个意思最适合这里的Tenured Generation,说的是:科教领域的一种雇佣制度,教师和科研工作者的一种权利,一种永久被雇佣的权利,永久到直到退休。再说,命名Tenured Generation的人是搞JVM的,老高深的玩意儿了,得是个科学家吧,科学家自然对科教领域的词汇比较有感情。<br><br><br><br>
2. 问世间Tenure为何物——美国大学管理体制: http://blog.163.com/prevBlogPerma.do?host=oliver_75&srl=386285720062201020580&mode=prev <br><br>
Thefreedictionary的解释还是有点晕晕的(为啥一开始整点英文呢,因为哥们对Tenure这个词都不宁得,这或许也是有些人把Tenured Generation说成Old Generation的原因吧,因为他们也不宁得~~),接着整点网友的解释:
问题1:
感情“Tenure”就是咱说的“铁饭碗”呀。咱不是说“铁饭碗”不利于社会进步么?为啥美国大学还整个“铁饭碗”制度呢?你得注意了,thefreedictionary说的是“科教领域”才有的“铁饭碗”制度,其他领域没有。那为啥科教领域就得有呢?它的积极意义在哪?<br><br>
问题2:<br>
除了“铁饭碗”,还有竞争制度,叫做“tenure-track”,“tenure-track”也被称做“up-or-out(要么晋升,要么出局)”,好个不进则退。了解到这,我仿佛有了招数怎么记住这个单词“Tenure”了,就是“特牛儿”(老外的很多单词也带儿化音的,注意了~~),我没想到美国文化跟中国文化有这么多想通的地方,那何不“特牛儿”的人,还不得“铁饭碗”。那“tenure-track”也自然明白了,要么你得“特牛儿”,要么他得“踹客”(晋升不了,没有贡献的,把你踹出门,滚蛋)。我咋这么有才呢?哎约妈呀,太有才! REFER: http://www.xici.net/d156572157.htm 大哥,您瞅这~~<br><br>
3、问题解答:tenure和tenure-track制度的积极意义
http://www.xici.net/d156572157.htm <br><br>
问题1的答案:
问题2的答案:<br>
4、赏析JAVA GC中的“tenure generation”的比喻修辞手法
(1)公平竞争:tenure-track机制<br>
如何从young晋升到tenure?这玩意儿跟我们人类社会的晋升法则一样一样的。太有趣了!一般情况下,我们都从伊甸园(Eden Space)出生(GC 背景:Young generation=Eden+From Survivor+To Survivor=8+1+1; 为新生对象分配空间时候,首先从Eden和From分配),刚出生就要面临残酷的竞争,一不小心小命就没了,面对Minor GC的考验,等待我们的是两种命运(制度就是“tenure-track”):1、挂了,失业了,下岗了(没有引用指向你,说明你没有为社会做贡献,被GC回收); 2、幸存下来。幸存下来就意味着拿到“铁饭碗”了?咱不是发达国家,哪有那么好的福利,还得接受组织的进一步考验,一般你得经过15轮Minor GC的考验,如果你依然在竞争中立于不败之地,那么组织有理由相信你是“特牛儿”,进入Tenured Generation。<br><br>
我们除了感叹竞争的残酷,也在庆幸制度的公平,只要你能经受15次洗礼,你就能晋升,可见tenure-track制度还是很公平的。真的这么公平吗?如果这样,似乎跟人类社会不一样吧。的确,除了tenure-track机制外,还有两种机制在影响这JAVA对象世界的公平:1、机会主义,就是说你不能生不逢时,你得赶上好年头;2、特权主义,如果你是“富二代”,你就不用活得那么累了。<br><br>
(2)机会主义:得赶上好年头<br>
如果Eden+From=80+10,面对Minor GC考验的时候,只有不到10(含10)个人幸存下来,那么他们都进入To Survivor(有10个空间安置他们),继续接受后续的竞争。但是如果赶上好年头,收成好,大家都有饭吃,都没饿死,幸存者大于10个(不妨假设是68个),而To Survivor只能安置10个人,还有多余的58个没地方安置,发财了,不用再接受而外的14次考验了,直接晋级到Tenured Generation。很不公平呀,68个幸存者都只经受了1次考验,但是有的却需要继续接受考验,有的却直接晋级。这就是社会说:没有绝对的公平,只有相对的公平,我们给予没有晋级的人,只能安慰一句“真金不怕火炼,只要你是块金子,总会有发亮的时候”。或许,这句安慰的话能让很多失意之仕找到一个重头再来的理由,但是接下来的特权主义,估计得让他们愤愤不平。<br><br>
(3)特权主义:“富二代”<br><br>
有些人原来不用从伊甸园出生,伊甸园再好(有免费的水果吃的~~),毕竟是人间。有些出生就是耶和华的儿子,天生的“富二代”,财大气粗伊甸园容不下他们。“富二代”是:大对象,大到什么程度呢?我们假设有一个大对象byte[XXX],需要很多空间,多到Eden+from的没有空间可以装下它(这个是特例,其实只要大于+XX:PertenureSizeThreshold就构成“富二代”的条件了),只能/最好安置到tenured generation。<br><br>
(4)武装起义:OutOfMemoryError
Tenure-track虽然竞争残酷,但毕竟公平;机会主义,虽然有不公平之处,但毕竟大家都可能成为幸运者,即使没有成为幸运者,只要你真金不怕火炼也有出头之日。但特权主义,就因为你是富二代,你就直接tenured generation了,我靠,义愤填膺了。一场可能的起义正在逐渐酝酿……<br><br>
在愤怒的刺激下,越来越多的能人志士都经受起Minor GC的考验,要冲进 tenured generation,为此当局要作出妥协:招安。但tenured generation这个富丽堂皇的宫殿(或许应该叫食堂)就这么多“铁饭碗”,得淘汰一些,依然发挥余热对社会有贡献的,保留(毕竟有些“铁饭碗”是真有本事的),没有再为社会做贡献的得“退休”了(在Young Generation的垃圾被出局,叫“下岗”;在Tenured Generation的垃圾被出局,叫“退休”,以表示Minor GC和Major GC的垃圾回收算法不同,就跟咱的社会养老保险和公务人员退休两套体系是一样一样的)。<br><br>
如果当局的自我改革还是不能平息矛盾,那就只能崩溃了:OutOfMemoryError。<br><br><br>