LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: jobinson99

java大型程序和eclipse为何运行效率差距很大?

[复制链接]
 楼主| 发表于 2010-7-31 19:19:38 | 显示全部楼层
Post by 至尊宝;2106225
Eclispe是SWT,NetBeans是Swing的。区别就在于IBM推的SWT,记得是用JNI调用OS的native API渲染的,效率上自然要比Swing高。具体细节得去看SWT文档了。

我实际的使用效果是swt系的蜗牛速度,而swing的反而飞速。
看了篇2007年的测评,是swt和swing在win下性能差别不大,但其他平台下,是swt不如swing

请问如何调节其性能?在何处调?或者如何google才能找到这答案?我google不出来。
回复 支持 反对

使用道具 举报

发表于 2010-7-31 19:29:38 | 显示全部楼层
Post by jobinson99;2106237
我实际的使用效果是swt系的蜗牛速度,而swing的反而飞速。

请问如何调节其性能?在何处调?或者如何google才能找到这答案?我google不出来。

可能是我没说清楚,应该限定一下,我说SWT效率高于Swing是JDK 1.4时代的印象。JDK 1.5 Tiger开始性能上有质的飞跃,1.6之后就完全不清楚了。Java的强项不在于GUI,个人对Java Swing/SWT的差异研究也有限。

此外SWT的效率和OS有关,各个OS上表现差异应该还是很大的。貌似在Win32上比较好...

对OpenJDK还是比较陌生的,平时工作中最多接触的就是Sun JVM和JRockit了,后者现在已经快死了,原因就是Sun JVM还是性能最好的...
回复 支持 反对

使用道具 举报

发表于 2010-7-31 20:32:39 | 显示全部楼层
无论是1.4还是1.5,1.6,我觉得都逊于SWT不过1.7会改变这一切的.至少1.6U20已经很快了.
TMD在2008R2,XP上Eclipse3.6 频频死了,32位3.5还不能用,启动不了.现在彻底扔了,其实我也没用过几次.\
OJDK似乎据说是和JDK没区别的,只是它开源,这样的话不应该有太大区别啊,有可能哪些设置需要改变下,
而且看上去它更适合Linux,貌似它只能用于Linux.

另外Eclipse似乎走到尽头了,E4会快一些的,还没正式版,也快了.
回复 支持 反对

使用道具 举报

发表于 2010-8-2 00:42:41 | 显示全部楼层
其实就swing在linux下也还是比windows下慢不少
没试过java7, 在6下测的, 因为一直用netbeans开发, 长时间用有对比, 弄得我现在用vim(虽然用熟了也很爽, 但是我还没那么geek, 键盘鼠标配合还是很方便的).
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-8-2 14:10:01 | 显示全部楼层
Post by CnkknD;2106404
其实就swing在linux下也还是比windows下慢不少
没试过java7, 在6下测的, 因为一直用netbeans开发, 长时间用有对比, 弄得我现在用vim(虽然用熟了也很爽, 但是我还没那么geek, 键盘鼠标配合还是很方便的).


netbeans速度上还可以接受,但eclipse没法接受,就像windows vista运行在2000年前的电脑上一样,这个速度换谁都受不了。
回复 支持 反对

使用道具 举报

发表于 2010-8-2 17:55:35 | 显示全部楼层
OJDK,JRE,SWT速度貌似差不太多
是不是你的Eclipse的问题,比如插件过多或损坏,或者磁盘碎片,或者Eclipse某些设置不当
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-8-2 22:02:25 | 显示全部楼层
Post by bhoppi;2106476
OJDK,JRE,SWT速度貌似差不太多
是不是你的Eclipse的问题,比如插件过多或损坏,或者磁盘碎片,或者Eclipse某些设置不当

都说是全新的了,这些因素都不存在。
我比较少用java的,所以openjdk sun jre 初装之后的速度是可以明显感觉出区别的,swt系的速度确实太过令人崩溃了。

磁盘碎片?呵呵。


其实,我要讨论的不是他们慢还是快,而是,如何优化他们。
回复 支持 反对

使用道具 举报

发表于 2010-8-3 07:25:31 | 显示全部楼层
Post by jobinson99;2106502

其实,我要讨论的不是他们慢还是快,而是,如何优化他们。


影响java应用运行效率的因素很多,只有先找到瓶颈才可能调优。
起码要查清楚是jvm的jit慢还是gc慢,gui(swt)拖了后腿还是内存颠簸所导致?

jit的问题可以先用-server参数来测试,运行一段时间给vm热身,等jit工作基本结束之后感受一下速度。

内存比较容易查,先看一下启动eclipse之前系统空余多少内存,启动运行并且感觉慢时剩余多少,交换空间使用了多少。
观察vmstat 1输出---swap--栏下面的si、so,如果前者周期性蹿高说明存在内存颠簸,如果是后者先高前者后高说明jvm分配了太多内存(或者系统本身剩余内存太少),可以通过vm参数将heap上限设置小一点,比如说256MB,前提是你系统还有这么多空闲内存。

java开发者有个不太好的习惯,就是容易过分依赖gc,程序运行中大量生成垃圾(特别是小块垃圾),导致gc运行频繁负载居高不下,可以通过profile来观察gc行为,不过就算找到问题也没什么办法。

swt的问题有点麻烦,以前用过swt空输出设备来做调试,通过远程class注入给swt发送消息,将显示输出overhead降低至最小,这方面要自己查一下资料。

另外可以换IBM或者gcj的jvm试一下,有些应用在不同jvm上表现差异很大。
顺便说一下:最后用eclipse是在eclipse 3.1的年代,在512MB的P3/500旧Linux服务器上做开发(后台还跑了个Oracle 10i数据库),jvm堆上限设置成196M,加上-server参数运行非常流畅。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-8-3 14:34:12 | 显示全部楼层
Post by lifc;2106522
影响java应用运行效率的因素很多,只有先找到瓶颈才可能调优。
起码要查清楚是jvm的jit慢还是gc慢,gui(swt)拖了后腿还是内存颠簸所导致?

jit的问题可以先用-server参数来测试,运行一段时间给vm热身,等jit工作基本结束之后感受一下速度。

内存比较容易查,先看一下启动eclipse之前系统空余多少内存,启动运行并且感觉慢时剩余多少,交换空间使用了多少。
观察vmstat 1输出---swap--栏下面的si、so,如果前者周期性蹿高说明存在内存颠簸,如果是后者先高前者后高说明jvm分配了太多内存(或者系统本身剩余内存太少),可以通过vm参数将heap上限设置小一点,比如说256MB,前提是你系统还有这么多空闲内存。

java开发者有个不太好的习惯,就是容易过分依赖gc,程序运行中大量生成垃圾(特别是小块垃圾),导致gc运行频繁负载居高不下,可以通过profile来观察gc行为,不过就算找到问题也没什么办法。

swt的问题有点麻烦,以前用过swt空输出设备来做调试,通过远程class注入给swt发送消息,将显示输出overhead降低至最小,这方面要自己查一下资料。

另外可以换IBM或者gcj的jvm试一下,有些应用在不同jvm上表现差异很大。
顺便说一下:最后用eclipse是在eclipse 3.1的年代,在512MB的P3/500旧Linux服务器上做开发(后台还跑了个Oracle 10i数据库),jvm堆上限设置成196M,加上-server参数运行非常流畅。

晕哦,我给了eclipse 2G的内存还是蜗牛速度,看来提升空间很大,只是我目前不知道而已。
回复 支持 反对

使用道具 举报

发表于 2010-8-6 09:49:24 | 显示全部楼层
我最近在ubuntu上用eclipse开发很流畅阿,Linux的文件系统非常快,所以我的eclipse的速度比windows下快多了。不过我用的是IBM JDK,不知道是不是因为这样所以有差别。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表