2011-01-13 47 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中重现该问题。