说这句话,意思是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的亏。
转自--http://blog.sina.com.cn/s/blog_4b6047bc010008ay.html
分享到:
相关推荐
SWT的设计目标是提供一个比Java Swing更接近原生平台的GUI,因此它能够更好地实现与操作系统底层的交互,提供更好的性能和更一致的外观。 在标题提到的"swt源码和jar包dj-native-swing-swt.jar"中,"dj-native-...
在Java编程环境中,SWING和SWT(Standard Widget Toolkit)是两种常见的图形用户界面(GUI)库,用于创建桌面应用程序。然而,有时我们可能需要在这些应用中集成Web浏览功能,比如显示网页或者运行Web应用。这篇博客...
swt swing awt的区别
在Java编程领域,Swing和SWT(Standard Widget Toolkit)是两种主要的GUI(图形用户界面)工具包,用于创建桌面应用程序。这个“关于swing和swt的小练习”压缩包文件提供了一些实际的代码示例,帮助开发者深入理解这...
swing2swt java应用开发包,貌似现在很少了
Swing Designer SWT 是一款强大的图形化工具,专为在Java环境中设计Swing和SWT用户界面而设计。这款插件是Eclipse IDE的一个扩展,它允许开发者通过直观的拖放方式构建用户界面,大大简化了GUI(图形用户界面)开发...
Java Swing和 SWT 是两种在Java中创建图形用户界面(GUI)的库,它们都提供了丰富的组件和工具来构建桌面应用程序。在这篇文章中,我们将深入探讨Java Swing中的分页技术和SWT(Standard Widget Toolkit)的使用,...
由于SWT更多地依赖于底层的本地GUI工具集,它的跨平台能力不如Swing,但是它的性能通常比Swing更佳。 在讨论三者的区别时,我们可以从它们的设计哲学、性能、兼容性、API设计等方面入手。Swing的设计目标是完全使用...
- **代码重构**:将 Swing 组件替换为对应的 SWT 组件。 - **事件处理**:修改事件监听器以适应 SWT 的处理机制。 - **测试**:确保迁移后的对话框功能正常,外观与预期一致。 #### 7. 总结及资源 - **总结**:...
"jigloo"是Eclipse的一款插件,专为简化Swing和SWT组件的图形化设计而设计。它提供了可视化的用户界面构建器,允许开发者通过拖放方式创建和布局UI组件,极大地提高了开发效率。jigloo支持Swing JFrames、...
打开一个Java项目,创建一个新的Java类,然后右键选择“New”>“Other”,在弹出的对话框中,你应该能看到“WindowBuilder”相关的选项,如“JFrame”(Swing)或“Shell”(SWT)。 5. **使用插件**: - 选择...
Swing提供了比AWT更多的组件选择,包括JButton、JLabel、JTable等,还提供了布局管理器、国际化支持以及可定制的外观(LookAndFeel)。Swing组件可以拥有透明背景,支持非矩形形状,而且更容易进行自定义和扩展。 *...
【SWT、Swing、AWT 之间的差异】 在Java GUI开发中,SWT(Standard Widget Toolkit)、Swing和AWT(Abstract Window Toolkit)是三种常见的工具包。它们各自拥有不同的特性和优缺点,适用于不同场景。 **AWT...
Java GUI技术在开发桌面应用程序时提供了丰富的用户交互界面,其中SWT(Standard Widget Toolkit)和SWING是两个常用的库。本项目重点在于如何利用这两者与jxBrowser库结合,来展示高性能且功能强大的ECharts图表。...
在Java编程领域,Swing、AWT和SWT都是用于构建图形用户界面(GUI)的框架。本篇文章将详细介绍如何在Eclipse集成开发环境中(IDE)搭建这些框架的开发环境,以及可以使用的相关插件。 首先,让我们从AWT(Abstract ...
Java图形界面(GUI)开发是Java编程中的一个重要领域,它为用户提供直观的、与操作系统交互的可视化组件。在Java中,主要有三个库用于创建GUI:Abstract Window Toolkit (AWT)、Swing和Standard Widget Toolkit (SWT...
然后是SWT,它是Eclipse项目开发的一种GUI库,旨在提供比AWT和Swing更接近原生UI的体验。SWT的事件处理机制与AWT和Swing有所不同。在SWT中,事件和事件监听器是通过事件监听器表(Listener List)来管理的。开发者...
标题“swt-64.rar_64位swt_64的SWT_SWT64_swt.jar 64位_swt64位”表明这个压缩包包含了适用于64位Windows操作系统的SWT库。描述中提到的“64位windows操作系统使用的SWT库”进一步确认了这一点。 SWT的设计目标是...