您的位置:首页 > Web前端

将GC进行到底(一)

2006-12-07 00:24 459 查看
原本想用“GC尚未成功,同志还须努力”作为标题,可是感觉有点不够气势,面对Java和C#的GC机制,我们觉得只有类似“JavaC#兮,GC难,壮士一去兮不复还”的诗句才足以表达。

GC,Garbage Collection,垃圾回收。

之前曾于面试时做过一个些Java的题目,原本挺有自信的,Java嘛,算是比较轻车熟路了,可是一看题目傻眼,全部是关于System.gc()的,虽然之前听说过,但是说到实质那是了解不多。

诚惶诚恐,上网找了很多文章来看,越看越流汗,回收机制原来那么高深,好多的回收算法,看得眼花缭乱。

总算明白是怎么回事了,感觉自己写的代码好菜,赶快在自己的代码里进行回收,可是一试,再试,JVM还是占用30多M,有增无减。Java的GC回收算法Reference Counting、Mark-Sweep、Mark-Compact、Coping、Non-Coping implicit collection、Incremental Tracing Collectors以及与C#共同有(代回收)Generational Garbage Collection,没有一个能用。

上网再查,最多的回答类似于"Java的垃圾回收机制是由JVM自己调度的,我们调用gc()方法也不能使JVM立即进行垃圾回收,JVM什么时候进行垃圾回收我们是无法预计的。我们也无法控制,所以Java里面的内存管理还是很弱的!"

之后开发J2ME,惊奇发现,网上有文章这样表示,有J2ME开发经验的程序员及某些手机厂商不建议使用GC,因为手机可能无法支撑GC回收时对手机资源的损耗。

之后在开发Mobicast闪播的时候,无法忍受.net庞大的内存的消耗,又去认真的了解了C#的回收机制及办法。答案几乎和Java的一致。无果。

此文出处www.mym2p.comhttp://mym2p.shineblog.com 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java j2me jvm reference c# 手机