2011-01-13 79 views
0

我已經擴展了一些基因組瀏覽器與約翰霍普金斯實驗室要求的一些功能。當我從命令行運行應用程序時,似乎沒有內存問題 - 應用程序已從-Xmx750m啓動。然而,當我運行相同的應用程序作爲Web啓動應用程序具有以下堆設置:Java網絡啓動應用程序崩潰與OutOfMemoryError

<java initial-heap-size="67108864" max-heap-size="1205862400" version="1.5+"/> 

經過一段時間的應用程序崩潰OutOfMemoryError而這樣的:

ERROR [2011-01-12 16:28:22,437] [DefaultExceptionHandler.java:42] [AWT-EventQueue-0] Unhandled exception 
java.lang.OutOfMemoryError 
at java.util.zip.Inflater.init(Native Method) 
at java.util.zip.Inflater.<init>(Unknown Source) 
at java.util.zip.Inflater.<init>(Unknown Source) 

有什麼區別本地應用和網絡啓動應用,除了我已經簽署了在web-start jnlp文件中調用的jar。 我試圖用JConsole和YourKit Java分析器附加到web-start應用程序。在每種情況下,我都通過調用HotSpotDiagnostic MBean的setVMOption操作來打開HeapDumpOnOutOfMemoryError屬性;但是當應用程序崩潰時,不會生成堆轉儲。

在我看來,崩潰與在web-start下運行有關。我非常努力地在桌面應用程序上導致OutOfMemoryError - 通過減少內存(-Xmx250m);這會導致應用程序暫停很長一段時間(多達5分鐘),而大概垃圾收集完成。但應用程序總是在暫停後恢復 - 從不崩潰。

任何人都可以告訴我一種方法來捕獲web啓動下的OutOfMemoryError上的堆轉儲嗎?儘管如此,我懷疑我可能根本沒有真正用完堆。但至少這將是一個開始的地方。

我在我的智慧結束 - 任何幫助將不勝感激。

我在Windows XP-SP2上運行Java 1.6.0_20-b02。

+2

您沒有運行最新版本的Java的任何特定原因? – 2011-01-13 01:41:13

回答

0

我也在我的應用程序中看到了這個。在我的情況下,它是由損壞的JAR引起的。如果嘗試將簽署罐子仍然有效(嘗試在WinZip或其他zip工具打開它們 - 我最喜歡的是CTRL + PGDOWN在TotalCommander中;-)

0

我昨天剛定一個非常類似的問題,我通過調用Deflater.end()解決(見this的一些額外的信息)。我在序列化期間出現OutOfMemoryError異常,但出於某種原因,僅在部署爲webstart時 - 無論Xmx如何,我都無法在Eclipse中或可執行jar中重現該問題。