2011-05-02 34 views
3

我經常聽說Java的Swing工具包被認爲是「內存豬」(例如this answer)。Java的Swing真的是一個「記憶豬」嗎?

這是...

  • 一個由於Swing的架構;

  • B Java固有的內存管理;或

  • Ç沒有根據的要求,從缺乏瞭解如何內存分配工作(例如,僅僅因爲任務管理器中說,一個應用程序分配的X ​​MB莖,實際上它並不意味着它實際上是使用所有的它)

我想找到一個具體的客觀分析關於Swing的真正的內存需求與類似的GUI工具包(不一定是Java)相比。

+0

「我聽到......」你有沒有對這個陳述有任何參考?否則,在我看來,這有點主觀。 – 2011-05-02 23:28:50

+2

我沒有任何參考證實或駁斥關於Swing的記憶使用的任何聲明,因此我在問這個問題。 – 2011-05-02 23:36:28

回答

2

搖擺使用相當多的內存這是真的,但我不會說它是一個「記憶豬」。作爲一個回覆說,在Swing中,每個組件都是自己繪製的(不使用操作系統原始小部件),這就是Swing在平臺之間移植的原因。

從我的角度來看,Look'n'Feel概念非常好,但它當然有一些缺點(內存消耗)。但是我發現這種缺點很大程度上是通過僅用一行代碼即時改變應用程序的外觀和感覺來抵消平衡的。那裏有一些第三方look'n'feel(一些商業,一些開源),可以給你的應用程序提供一些「友好」的外觀。另外,內存使用也起源於JDK(至少直到6)在內存中加載(或預加載)類的方式:就我所見,在第二次在代碼中運行一些Swing API ,整個Swing庫會被完全加載,即使你不需要所有的小部件。 JDK7(我沒有測試過)和「Jigsaw」可能會改變。

4

我經常用「臃腫」的搖擺意味着什麼稍有不同:

搖擺捆綁它本身的需要,而不是用什麼已經提供的一切。

這是什麼意思?這意味着你使用/看到的任何東西都是由Swing繪製和完全處理的。相比之下,SWT實際上使用操作系統的窗口,所以自然而然地,它具有更少的內存使用量和更少的工作量。 Swing中的「窗戶」並不是真的「窗戶」,它們只是製作成看起來像一樣的窗戶。相比之下,SWT使用「真實」窗口,並讓操作系統進行大量管理。

+0

然後eclipse如何使用與intellij一樣多的RAM?我的電腦上的Visual Studio使用100 - 200 MB,而intellij和eclipse可以使用300 - 900,通常平均爲500。 – Pavel 2015-08-24 21:18:55

+0

@ paulpaul1076:也許是因爲RAM的使用比GUI更多? – Mehrdad 2015-08-24 23:04:06

+0

像什麼?缺乏Java和所有的價值類型? – Pavel 2015-08-24 23:06:45

2

請看附件的測試表明它是在許多情況下,平局:

  1. 結論 這是很難給出一個規則的拇指,其中SWT會勝過搖擺,反之亦然。 在某些環境下(例如Windows),SWT是勝利者。在其他Linux(Linux,VMware託管Windows的VMware )中,Swing及其重繪優化性能明顯優於SWT。 性能差異顯着:2個或更多的因素是常見的,在兩個方向都是 。 Swing抑制連續重繪的能力在 有效。在實踐中這很可能不是經常發生的事情,因爲在短時間內重複更新請求可能並不常見。在這種情況下,Swing Text Field(sync)測試的結果 應該被認爲具有比Swing Text Field測試更高的可信度,因爲它們近似地更接近資源使用情況 。 執行此基準之前的初始預期是找到SWT超越 Swing。這種預期源於與基於Swing的應用程序相比,基於SWT的Java應用程序(例如Eclipse IDE)的響應速度更快。但是,這種預期無法定量確認。感知響應性可能是響應用戶交互所需的較短時間的結果,其不僅涉及繪圖,還涉及檢測用戶的動作並響應用戶的動作。而且,決定論(較小的標準偏差)可能導致更高的感知響應性。

http://public.cosylab.com/CSS/DOC-SWT_Vs._Swing_Performance_Comparison.pdf

+0

不是問題的真正答案,你關注性能,而OP詢問內存使用情況(儘管我承認可能會對第一個產生影響)。 – jfpoilpret 2011-05-03 05:11:31

+0

您的觀點很好,報告的結論可能不是我的答案中最好的。但報告中的表格顯示了所使用的資源,並給出了我所看到的最佳比較。 – Bit 2011-05-03 10:46:46

+0

此報告已過時,並未顯示內存資源消耗。我對JTable獲得的時間差也感到驚訝,因爲我不知道代碼是如何編寫的。 – jfpoilpret 2011-05-03 19:58:05