2012-06-27 66 views
0

我知道JVM是一個守財奴,但是這是一個衝擊對我說:在啓動時使用的180MB與 netbean的非常基本的「聯繫人編輯器」界面上再加一些基本的通用的實例?簡單的Swing程序即使在空閒時也能使用〜200MB?

我沒有建立一個1998年大約第一人稱射擊遊戲。我懇求SO社區在這一點上給我啓迪。這裏是一個JConsole的打印屏幕:

enter image description here

另外:我已經啓動18個線程,永遠不會死。除了始終存在的初始線程和Swing的調度線程之外是否還有其他線程?

回答

1

線程是不是一個真正的內存問題(大約一半的18只是因爲你是在調試模式下IIRC)。其他的有很明顯的名字(我的猜測):AWT-Shutdown(檢查所有的窗口是否處置,然後退出JVM),AWT-Windows(從操作系統獲取事件),Java2D垃圾處理器(圖像數據清理)。

我不知道你正在運行的程序,但如果它是基於Netbeans 平臺,可能會增加一些額外的內存需求,但不是180MB。我想大部分內存不是被使用(只是保留),或者是實際的數據佔用內存。

對於比較:?

  • 有一個標籤和一個按鈕,只需要〜2MB一個簡單的JFrame(與 -Xmx2MB運行,儘管VisualVM的顯示它具有8MB保留在64位Windows(最小),< 2MB用過的)。
  • 我用70MB的庫(jars)開發的一個複雜的GUI程序是在 開始〜35MB(其中我的猜測是〜5-10MB只是圖標/圖像)之後,並且在 之後使用所有功能(幾乎所有的庫代碼加載,包括 非GUI版本)〜100MB,但包含一些數據。

擊穿:

  1. java.awt.image.BufferedImage中的#156 7.056.378
  2. java.awt.image.BufferedImage中的#415 6.639.738
  3. sun.misc.Launcher $ AppClassLoader#1 3.386.545
  4. 類com.ces.core.gui.help.WelcomeTab 627.256顯示在用戶界面(靜態圖像數據在這裏)
  5. 類com.ces.util.resources.Translator 408.146(基本上所有文字)
  6. sun.awt.AppContext#1 389.760
  7. java.awt.image.BufferedImage中的#161 326.120

大約有一半的樣子高速緩存圖像(大背景圖像:))我離開了INT [] /對象[]/HashMap中。條目[]是指相同的數據)

如果你想看到你的示例應用程序的細分 - > VisualVM - >監視器 - >堆轉儲 - >按保留大小查找x最大的對象。

1

我不熟悉Contact Editor,但嵌入式數據庫或模擬器可能會負責。我最喜歡的JVM爲典型的Swing GUI運行10個線程,但只有三個是活動的,沒有真正做太多。此example型材視覺「忙」 program,這example使用人工堆以突出的範圍內。

相關問題