`

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源码和jar包dj-native-swing-swt.jar

    SWT的设计目标是提供一个比Java Swing更接近原生平台的GUI,因此它能够更好地实现与操作系统底层的交互,提供更好的性能和更一致的外观。 在标题提到的"swt源码和jar包dj-native-swing-swt.jar"中,"dj-native-...

    在SWING、SWT中嵌入浏览器

    在Java编程环境中,SWING和SWT(Standard Widget Toolkit)是两种常见的图形用户界面(GUI)库,用于创建桌面应用程序。然而,有时我们可能需要在这些应用中集成Web浏览功能,比如显示网页或者运行Web应用。这篇博客...

    swt swing awt的区别

    swt swing awt的区别

    关于swing和swt的小练习

    在Java编程领域,Swing和SWT(Standard Widget Toolkit)是两种主要的GUI(图形用户界面)工具包,用于创建桌面应用程序。这个“关于swing和swt的小练习”压缩包文件提供了一些实际的代码示例,帮助开发者深入理解这...

    swing2swt包

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

    Swing Designer SWT

    Swing Designer SWT 是一款强大的图形化工具,专为在Java环境中设计Swing和SWT用户界面而设计。这款插件是Eclipse IDE的一个扩展,它允许开发者通过直观的拖放方式构建用户界面,大大简化了GUI(图形用户界面)开发...

    java Swing、SWT分页

    Java Swing和 SWT 是两种在Java中创建图形用户界面(GUI)的库,它们都提供了丰富的组件和工具来构建桌面应用程序。在这篇文章中,我们将深入探讨Java Swing中的分页技术和SWT(Standard Widget Toolkit)的使用,...

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

    ### 开发项目用SWING与RCP与SWT.JFACE的分析 #### 一、SWT简介 ...综上所述,SWT不仅在性能和外观上超越了传统的AWT和Swing,而且在易用性和维护性方面也有显著提升,为Java桌面应用开发提供了强有力的支持。

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

    由于SWT更多地依赖于底层的本地GUI工具集,它的跨平台能力不如Swing,但是它的性能通常比Swing更佳。 在讨论三者的区别时,我们可以从它们的设计哲学、性能、兼容性、API设计等方面入手。Swing的设计目标是完全使用...

    Java Swing to SWT.pdf

    - **代码重构**:将 Swing 组件替换为对应的 SWT 组件。 - **事件处理**:修改事件监听器以适应 SWT 的处理机制。 - **测试**:确保迁移后的对话框功能正常,外观与预期一致。 #### 7. 总结及资源 - **总结**:...

    eclipse swing/SWT插件

    "jigloo"是Eclipse的一款插件,专为简化Swing和SWT组件的图形化设计而设计。它提供了可视化的用户界面构建器,允许开发者通过拖放方式创建和布局UI组件,极大地提高了开发效率。jigloo支持Swing JFrames、...

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

    打开一个Java项目,创建一个新的Java类,然后右键选择“New”>“Other”,在弹出的对话框中,你应该能看到“WindowBuilder”相关的选项,如“JFrame”(Swing)或“Shell”(SWT)。 5. **使用插件**: - 选择...

    swing和swt

    Swing提供了比AWT更多的组件选择,包括JButton、JLabel、JTable等,还提供了布局管理器、国际化支持以及可定制的外观(LookAndFeel)。Swing组件可以拥有透明背景,支持非矩形形状,而且更容易进行自定义和扩展。 *...

    SWT Swing与AWT区别

    【SWT、Swing、AWT 之间的差异】 在Java GUI开发中,SWT(Standard Widget Toolkit)、Swing和AWT(Abstract Window Toolkit)是三种常见的工具包。它们各自拥有不同的特性和优缺点,适用于不同场景。 **AWT...

    java GUI (SWT\SWING jxBrower)整合网页echart ,打造出高性能功能强大图表

    Java GUI技术在开发桌面应用程序时提供了丰富的用户交互界面,其中SWT(Standard Widget Toolkit)和SWING是两个常用的库。本项目重点在于如何利用这两者与jxBrowser库结合,来展示高性能且功能强大的ECharts图表。...

    在eclipse下搭建swing/awt/swt开发环境的方法和插件

    在Java编程领域,Swing、AWT和SWT都是用于构建图形用户界面(GUI)的框架。本篇文章将详细介绍如何在Eclipse集成开发环境中(IDE)搭建这些框架的开发环境,以及可以使用的相关插件。 首先,让我们从AWT(Abstract ...

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

    Java图形界面(GUI)开发是Java编程中的一个重要领域,它为用户提供直观的、与操作系统交互的可视化组件。在Java中,主要有三个库用于创建GUI:Abstract Window Toolkit (AWT)、Swing和Standard Widget Toolkit (SWT...

    SWT_AWT_Swing事件处理机制

    然后是SWT,它是Eclipse项目开发的一种GUI库,旨在提供比AWT和Swing更接近原生UI的体验。SWT的事件处理机制与AWT和Swing有所不同。在SWT中,事件和事件监听器是通过事件监听器表(Listener List)来管理的。开发者...

    swt-64.rar_64位swt_64的SWT_SWT64_swt.jar 64位_swt64位

    标题“swt-64.rar_64位swt_64的SWT_SWT64_swt.jar 64位_swt64位”表明这个压缩包包含了适用于64位Windows操作系统的SWT库。描述中提到的“64位windows操作系统使用的SWT库”进一步确认了这一点。 SWT的设计目标是...

Global site tag (gtag.js) - Google Analytics