首先声明该贴不是企图引起两个阵营开发者对骂的月经贴,希望从纯粹的技术角度请大家谈一谈对JVM/CLR的认识。众所周知,Eclipse和VS系列分别是Java、.Net开发中最优秀的IDE,但是我一直很困惑为什么Eclipse的内存占用比VS2010(2010以下的版本就不说了,本地代码写的IDE没有可比性)高了一倍多?我知道这不会单纯是虚拟机实现水平的问题,其中可能有各种原因,请了解的人说一说吧。
另外,JVM默认的GC策略和CLR有比较大的出入,我感觉是JVM在物理内存有剩余时,几乎不进行GC,所以Eclipse、Netbeans等大型软件通常开了一段时间之后内存会上升到0.5-1G,非常的可怕。不知道是不是只有GUI程序才这样(自己开发的服务端程序没有发现这种情况,也看不出和.Net程序在内存使用上有明显差别)。希望对这两个虚拟机有了解的人谈一谈你的认识,内存占用上差别是否真如两款IDE所表现出来的那么大?另外,有什么办法能显示Eclipse的内存占用。从技术角度讨论,大家不要吵架。
另外,JVM默认的GC策略和CLR有比较大的出入,我感觉是JVM在物理内存有剩余时,几乎不进行GC,所以Eclipse、Netbeans等大型软件通常开了一段时间之后内存会上升到0.5-1G,非常的可怕。不知道是不是只有GUI程序才这样(自己开发的服务端程序没有发现这种情况,也看不出和.Net程序在内存使用上有明显差别)。希望对这两个虚拟机有了解的人谈一谈你的认识,内存占用上差别是否真如两款IDE所表现出来的那么大?另外,有什么办法能显示Eclipse的内存占用。从技术角度讨论,大家不要吵架。
eclipse的构架和vs差别很大。最明显的一个例子,最小化安装的eclipse,竟然无法开发java,但是同样一个eclipse下,你可以装上n多个插件,然后同时在一个workspace下开发java(jdt),c/c++(cdt),php(pdt),flash(fdt),perl.....,而vs里面(2010还没用过,但是本人之前的版本都试用过),就直接区分为若干个不同的xxx 2010程序。同时,还能运行很多很多其他插件,加载的功能多了,内存自然就上去了。
不过,我更为关注的是,为什么Eclipse继续用一段时间之后,内存会无节制地增长,然后到6、7百兆开始卡了必须重启IDE,这是SWT(用了本地控件、不知道对象释放会不会有漏洞)的问题还是JVM的问题?请大家多多多多指教,或者发表一下想法,共同探讨。
你见过几个用VS装插件的?有几个eclipse不装插件的?jvm和eclipse(我不觉得是swt)各占一半责任,jvm的垃圾回收需要tuning一下才能比较好的发挥。而eclipse打开.java,.jsp,.html,.xml,.properties都会加载不同的editor和设置,每开一种,内存消耗自然会上去。然后还有不同的视图。所以,对于资源紧张的用户,建议大家尽量默认用text editor打开.xml之类文件。同时及时关闭不用的project/perspective/file,卸载掉一些不必要的插件,特别是装myeclipse的,workspace设置>General>Startup and Shutdown里面,跟你项目没关系的,全关!
顺便说一下,我的是去年的机器,酷睿2.7G,2G内存,JDK1.6u18,Eclipse3.5。在我机器上运行Eclipse不慢,可是它一直渐渐地增加内存占用,开一天之后就开始卡了(每逢在Java Editor复制黏贴开始卡的时候,我就打开任务管理器,一看java进程肯定吃着5、6百内存,这个相信大家都有经验吧)。
我注意到VS2010有一个现象,闲置一段时间之后内存就会悄悄降下去,这才是我们认为的正常行为啊,难道Eclipse缓存着所有用过的资源?
而关闭Eclipse,则释放的总内存则和jvm进程占的内存恰好匹配,非常“诚实”。
我怀疑,VS2010是不是将很多功能放到了Windows服务中去了,一致进程本身占的内存少,这是一种“作弊”的方式还是说能提高效率呢?常规Windows程序会采用这种方式吗?