溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Swing和SWT的速度比較

發(fā)布時(shí)間:2021-07-14 16:24:04 來源:億速云 閱讀:274 作者:chen 欄目:編程語言

這篇文章主要介紹“Swing和SWT的速度比較”,在日常操作中,相信很多人在Swing和SWT的速度比較問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Swing和SWT的速度比較”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

前面文章已經(jīng)說過,MiG Layout Site網(wǎng)站的Mikael Grev曾編寫了一個GUI benchmark,來測試和比較Swing和SWT的性能,最終結(jié)論是除在Windows上比較Swing和SWT的速度幾乎一樣快之外,在其他操作系統(tǒng)上Swing的速度都要快于SWT。

這好像違背人們的常識,模擬的組件如何能快過本地組件?實(shí)際如果你按照下面的想法想,這個現(xiàn)象也就不難解釋:

1.本地組件實(shí)際上也是畫出來,只不過是操作系統(tǒng)畫罷了。這個通常是人們所忽略的,仿佛只有Swing是畫出來的,而本地組件就是屏幕上的附屬物似的,忘記了它們也是畫出來的。

2.現(xiàn)在Java平臺的運(yùn)行速度已經(jīng)不慢于C/C++等靜態(tài)編譯型語言的產(chǎn)生的代碼。人們往往提到本地仿佛就比Java實(shí)現(xiàn)要快。在過去也許可以這樣看,但是現(xiàn)在隨著Java 6平臺性能的提高,許多地方Java平臺的速度反而快過本地調(diào)用。因此是應(yīng)該讓人們從過去對于Java速度的印象中醒過來時(shí)候了,現(xiàn)在人們提到Java速度想到的應(yīng)該是和C/C++相提并論了。

3.JNI調(diào)用耗費(fèi)的時(shí)間是不能忽略的。JNI調(diào)用速度要比普通Java方法調(diào)用慢好幾倍甚至幾十倍。即便是在Java 6中,這種情況并沒有改善。問題的實(shí)質(zhì)在于Java運(yùn)行時(shí)系統(tǒng)和本地庫之間畢竟是兩個異質(zhì)系統(tǒng),它們之間的調(diào)用必然有大量的轉(zhuǎn)換開銷。Java普通方法調(diào)用和JNI調(diào)用之間的關(guān)系就好像是本地調(diào)用和遠(yuǎn)程過程調(diào)用之間的區(qū)別,遠(yuǎn)程過程調(diào)用有網(wǎng)絡(luò)數(shù)據(jù)通信和數(shù)據(jù)類型系統(tǒng)轉(zhuǎn)換的開銷,而JNI也有數(shù)據(jù)傳遞(主要是內(nèi)存拷貝,速度雖然快過網(wǎng)絡(luò)通信,但是相對直接調(diào)用是不能忽略的)和數(shù)據(jù)類型系統(tǒng)轉(zhuǎn)換(Java數(shù)據(jù)類型和C語言數(shù)據(jù)類型)的開銷。

4.Swing絕大部分是用Java平臺模擬出的組件,這個過程都在一個系統(tǒng)平臺內(nèi)完成。而SWT是部分在本地系統(tǒng)完成,部分在Java平臺完成,要在這兩個平臺之間需要進(jìn)行頻繁的數(shù)據(jù)交互。

5.Swing可以享受JVM的特殊待遇,進(jìn)行特殊優(yōu)化,比如inline,JIT代碼,Swing事件隊(duì)列對于事件的預(yù)處理(合并Paint事件,批處理Java 2D光柵指令等),這就像本地組件可以利用操作系統(tǒng)進(jìn)行優(yōu)化一樣。

因此如果排除人的因素,也就是說排除Java平臺的工程師、Windows的工程師、Linux的工程師和Solaris的工程師本身能力的區(qū)別,從理論上來說,Swing的速度是完全可以超過SWT的。理解這一點(diǎn)你只要記住最關(guān)鍵的兩個原因是:

1).Java平臺的速度可以和C/C++一樣快。這個已經(jīng)被很多benchmark證明了,它們的速度是相當(dāng)?shù)?。因此Java模擬組件不一定會慢過本地組件,這要看誰的實(shí)現(xiàn)算法好。

2).跨系統(tǒng)之間的調(diào)用(JNI調(diào)用)開銷是不能忽略的。這個也在很多論文和benchmark得到證明。Swing中組件和數(shù)據(jù)之間的更新速度要遠(yuǎn)快于SWT,其原因就是Swing不需要進(jìn)行數(shù)據(jù)傳輸,而SWT需要跨兩個系統(tǒng)進(jìn)行數(shù)據(jù)傳輸。這在大數(shù)據(jù)量編輯組件如Table中尤其明顯。原因就在于Swing直接顯示了數(shù)據(jù)模型,而SWT需要將這些數(shù)據(jù)使用JNI發(fā)送到本地組件中去。

不可否認(rèn),Microsoft在Windows上浸淫了這么多年,圖形用戶界面的優(yōu)化已經(jīng)非常完善,而反觀Linux和Unix系列的桌面系統(tǒng)卻沒有如此優(yōu)化過。這就是為什么前文的benchmark顯示SWT能在Windows上和Swing速度相持平,而在其他平臺上遠(yuǎn)慢于Swing的原因。因?yàn)镾WT使用本地組件,它既占了Windows的光,也因此吃了Linux和Unix的虧。以上是比較wing和SWT的速度。

到此,關(guān)于“Swing和SWT的速度比較”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI