Java Web Start应用程序因OutOfMemoryError崩溃

时间:2011-01-13 01:24:23

标签: java java-web-start out-of-memory

我已经扩展了一个基因组学查看器,其中包含约翰霍普金斯实验室要求的一些功能。当我从命令行运行应用程序时,我似乎没有内存问题 - 该应用程序已启动-Xmx750m。但是,当我使用以下堆设置运行与web-start应用程序相同的应用程序时:

  <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应用程序之间没有区别,除了我已经签署了在web-start jnlp文件中调用的jar。 我试图用JConsole和YourKit Java Profiler连接到web-start应用程序。在每种情况下,我都通过调用HotSpotDiagnostic MBean的setVMOption操作来打开HeapDumpOnOutOfMemoryError属性;但是当应用程序崩溃时,不会生成堆转储。

在我看来,崩溃与在web-start下运行有关。我已经非常努力地在桌面应用上引起OutOfMemoryError - 通过减少内存(-Xmx250m);这导致应用程序暂停很长一段时间(多达5分钟),而可能是垃圾收集完成。但该应用程序总是在暂停后恢复 - 永远不会崩溃。

有人能告诉我在web-start下捕获OutOfMemoryError上的堆转储的方法吗?虽然,我怀疑我可能根本就没有用完堆。但至少它是一个开始的地方。

我在我的智慧结束 - 任何帮助将不胜感激。

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

2 个答案:

答案 0 :(得分:0)

我也在我的应用中看到了这个。在我的情况下,它是由损坏的JAR引起的。尝试签名的罐子仍然有效(尝试在winzip或其他拉链工具中打开它们 - 我最喜欢的是TotalCommander中的CTRL + PGDOWN ;-)

答案 1 :(得分:0)

我昨天解决了一个非常类似的问题,我通过调用Deflater.end()解决了这个问题(请参阅this了解更多信息)。我在序列化期间遇到了OutOfMemoryError异常,但出于某些原因,只有在部署为webstart时 - 我无法在Eclipse或可执行jar中复制问题而不管Xmx。