`

Swing为什么能比SWT快?(转载)

阅读更多
转载自http://blog.sina.com.cn/swingjava

说这句话,意思是Swing可以快过SWT,而且事实已经证明了这一点。MiG Layout Site网站的Mikael Grev曾编写了一个GUI benchmark,来测试和比较Swing和SWT的性能,最终结论是除在Windows上Swing和SWT的速度几乎一样快之外,在其他操作系统上Swing的速度都要快于SWT

这好像违背人们的常识,模拟的组件如何能快过本地组件?实际如果你按照下面的想法想,这个现象也就不难解释:

1. 本地组件实际上也是画出来,只不过是操作系统画罢了。这个通常是人们所忽略的,仿佛只有Swing是画出来的,而本地组件就是屏幕上的附属物似的,忘记了它们也是画出来的。

2. 现在Java平台的运行速度已经不慢于C/C++等静态编译型语言的产生的代码。人们往往提到本地仿佛就比Java实现要快。在过去也许可以这样看,但是现在随着Java 6平台性能的提高,许多地方Java平台的速度反而快过本地调用。因此是应该让人们从过去对于Java速度的印象中醒过来时候了,现在人们提到Java速度想到的应该是和C/C++相提并论了

3. JNI调用耗费的时间是不能忽略的。JNI调用速度要比普通Java方法调用慢好几倍甚至几十倍。即便是在Java 6中,这种情况并没有改善。问题的实质在于Java运行时系统和本地库之间毕竟是两个异质系统,它们之间的调用必然有大量的转换开销。Java普通方法调用和JNI调用之间的关系就好像是本地调用和远程过程调用之间的区别,远程过程调用有网络数据通信和数据类型系统转换的开销,而JNI也有数据传递(主要是内存拷贝,速度虽然快过网络通信,但是相对直接调用是不能忽略的)和数据类型系统转换(Java数据类型和C语言数据类型)的开销。

4. Swing绝大部分是用Java平台模拟出的组件,这个过程都在一个系统平台内完成。而SWT是部分在本地系统完成,部分在Java平台完成,要在这两个平台之间需要进行频繁的数据交互。

5. Swing可以享受JVM的特殊待遇,进行特殊优化,比如inline,JIT代码,Swing事件队列对于事件的预处理(合并Paint事件,批处理Java 2D光栅指令等),这就像本地组件可以利用操作系统进行优化一样。

因此如果排除人的因素,也就是说排除Java平台的工程师、Windows的工程师、Linux的工程师和Solaris的工程师本身能力的区别,从理论上来说,Swing的速度是完全可以超过SWT的。理解这一点你只要记住最关键的两个原因是:

1. Java平台的速度可以和C/C++一样快。这个已经被很多benchmark证明了,它们的速度是相当的。因此Java模拟组件不一定会慢过本地组件,这要看谁的实现算法好。

2. 跨系统之间的调用(JNI调用)开销是不能忽略的。这个也在很多论文和benchmark得到证明。Swing中组件和数据之间的更新速度要远快于 SWT,其原因就是Swing不需要进行数据传输,而SWT需要跨两个系统进行数据传输。这在大数据量编辑组件如Table中尤其明显。原因就在于 Swing直接显示了数据模型,而SWT需要将这些数据使用JNI发送到本地组件中去。

    不可否认,Microsoft在Windows上浸淫了这么多年,图形用户界面的优化已经非常完善,而反观Linux和Unix系列的桌面系统却没有如此优化过。这就是为什么前文的benchmark显示SWT能在Windows上和Swing速度相持平,而在其他平台上远慢于Swing的原因。因为 SWT使用本地组件,它既占了Windows的光,也因此吃了Linux和Unix的亏。
分享到:
评论

相关推荐

    swt swing awt的区别

    swt swing awt的区别

    swing2swt包

    swing2swt java应用开发包,貌似现在很少了

    开发项目用SWING与RCP与SWT.JFACE的分析

    所有的SWT类都用org.eclipse.swt做为包的前缀,下面为了简化说明,我们用*号代表前缀org.eclipse.swt,比如*.widgets包,代表的是org.eclipse.swt.widgets包。 我们最常用的图形构件基本都被包括在*.widgets包中,...

    SWT Swing与AWT区别

    通常来说,每个工具包都非常完整且功能强大,足以构建功能完善的 GUI,但是 Swing 通常要比单独使用 SWT(不使用 JFace 时)更好。Swing 具有内嵌于 Java 技术的优点,是完全可移植的,无可争议地是一种更好的架构。...

    浅析Java中Swing与SWT和AWT的区别及实现_王亚南

    Swing 和 SWT,AWT 技术都是在 Java 图形化界面设计中常用的开发包,在进行 Java GUI 编程时,大家或许经 常徘徊在 SWT,Swing,AWT 之间选择,哪一个更合适自己? 本文简单介绍了三者中各自的功能特点,以及之间的区别...

    在SWING、SWT中嵌入浏览器

    NULL 博文链接:https://gxblluojialin.iteye.com/blog/2028156

    Swing Designer SWT

    SWT Designer 适用于eclipse3.2及以上版本

    swing和swt

    在开发applet和图形应用程序时,一般需要用到AWT,AWT是免费Java开发工具包(JDK)的一部分。 AWT的作用是给用户提供基本的界面构件,例如按钮、列表、菜单、文本域等等。AMT 构件主要是用来建立图形用户界面的独立...

    swt源码和jar包dj-native-swing-swt.jar

    swt开发需要的jar包,32位。需要在32为浏览器中使用。src中为源码,可以直接在项目中引用。也可以使用打好的jar包。开发图形化程序使用。1.0.2版本

    Eclipse Swing Swt builder 插件安装包及安装说明

    Eclipse Swing Swt builder 插件安装包及安装说明 非常好用 我们学校好多同学一直用的

    关于swing和swt的小练习

    里面有每个题目的截图和相关的代码,是经过反复修改和优化的,都是可以直接运行的。其中有简单计算器和日历等

    Java Swing to SWT.pdf

    Standard Widget Toolkit是一个开源的GUI编程框架,与AWT/Swing有相似的用处,著名的开源IDE-eclipse就是用...或许是无心插柳,或是有意为之,至今为止,SWT无论是在性能和外观上,都超越了SUN公司提供的AWT和SWING。

    eclipse swing/SWT插件

    eclipse 开发SWING的插件jigloo

    eclipse.3.1swing swt插件注册破解

    eclipse.3.1swing swt插件注册破解

    图形界面开发--AWT,Swing,SWT

    本教程详细介绍了 java开发中关于awt swing swt 的论述

    java Swing、SWT分页

    java Swing分页mjava Swing分页 还有项目实例 很不错的

    实际SWT的项目 Swing客户端

    实际工作的一个Swing项目,初始用户名密码为:app!

    SWT、Swing 或 AWT:哪个更适合您

    SWT、Swing 或 AWT:哪个更适合您

    swt.zip_SWT_swing

    swt 界面设计SWT(Standard Widget Toolkit) Standard Widget Toolkit是一个开源的GUI编程框架,与AWT/Swing有相似的用处,著名的开源IDE-eclipse就是用SWT开发的。 在SWT之前,Sun已经提供了一个跨平台GUI开发工具包...

    SWT API JAVA窗口程序开发AWT/Swing外的另种开发方式

    SWT,AWT/Swing外,java的另一种桌面窗口程序的开发包。做JAVA桌面窗口开发,我们有了更多的选择。此API是我自己生成的。对应的SWT版本是我网上下的最新的,版本是swt-3.4,里面没有API。网上也没找到最新版本的,我...

Global site tag (gtag.js) - Google Analytics