Monday, August 14, 2006

用跑步來解釋JVM的Garbage Collection

用生活化的例子來解釋技術上的細節通常效果都很好,即使是一點都不懂技術的人都能夠很快的明白。

最近跟客戶在解釋所謂的Garbage Collection的時候忽然福至心靈,想到以下的解釋。

JVM和人的心肺運作其實相當類似。我們透過吸氣將氧氣吸收,呼氣將身體內的二氧化碳排出,像這樣的道理,人人都明白。但是有時候身體的運動太激烈,會造成心肺活動趕不上氧氣的消耗;舉例來說,假設我快跑一分鐘,可能只要休息一分鐘,我的呼吸和心跳就可以恢復正常。但是如果我將快跑的時間延長到兩分鐘,那在一樣的體力狀態下,我可能需要休息兩分半鐘才能夠將呼吸調回正常狀態。這其實都是因為在快速的跑步下,身體對氧氣的需求是大於我們心肺能力所能夠提供的量,所以需要更久的休息時間才能將身體恢復程正常的狀態。

JVM也有類似的狀況。所謂的Garbage Collection,就是JVM的休息時間(雖然就技術上來說,這反而可能是JVM最繁忙的時候)。如果一開啟JVM的時候就將Heap開到很大,這就好比我們將快跑的時間延長一樣,需要更多的時間來休息/Garbage Collection。但是如果開得太小,又會造成太過於頻繁的休息/Garbage Collection。所謂的JVM Performance Tuning,正是考慮到上述各種因素之後的Tradeoff。

No comments: