hack有水平高低之分,最近看到一個(gè)blog,牛人的hack水平讓你不得不服。情況是這樣的,牛人在使用 mongrel_light_cluster的過(guò)程中,發(fā)現(xiàn)這個(gè)cluster違反了copy-on-write的語(yǔ)義,導(dǎo)致占用了太多的內(nèi)存。根本原因在于Ruby的GC機(jī)制是marks all memory pages as dirty。為了減少內(nèi)存的占用,讓集群跑更多mongrel,牛人走上了hack之路,給c ruby打補(bǔ)丁,他也真的做到了。c ruby的GC使用的是mark and sweep(標(biāo)記并清除)的垃圾收集算法,他發(fā)現(xiàn)在mark過(guò)程中使用了st_table,這個(gè)數(shù)據(jù)結(jié)構(gòu)占用了很大的內(nèi)存,那么就改用Google’s sparse_hash。然后他又寫了一個(gè)memory pool,以應(yīng)對(duì)marking和sweep使用過(guò)程中對(duì)malloc和free調(diào)用帶來(lái)的內(nèi)存損失,因?yàn)樵趚86 GNU/linux gcc上,malloc函數(shù)如果申請(qǐng)的內(nèi)存小于76KB,那么當(dāng)free的時(shí)候這些內(nèi)存不會(huì)被返還給操作系統(tǒng)。他的hack之路還沒(méi)結(jié)束,有興趣的關(guān)注他的blog:
http://izumi.plan99.net/blog/index.php/
http://izumi.plan99.net/blog/index.php/