首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JMagick和JVM崩溃

JMagick和JVM崩溃
EN

Stack Overflow用户
提问于 2011-09-09 16:44:47
回答 3查看 1.7K关注 0票数 2

我使用的是JMagick,它有一个简单的Java类,它遍历目录(及其子目录)中的所有图像,将图像转换为灰度图像。

在我的应用程序运行了一段时间之后,JVM就崩溃了。我认为日志中的错误消息可能意味着存在内存问题:

Java帧:( magick.MagickImage.writeImage(Lmagick/ImageInfo;)Z+0 com.example.ImageGenerator.generateAlternativeImages(Ljava/io/File;Z)V+91 j com.example.ImageGenerator.main([Ljava/lang/String;)V+58 v ~StubRoutines::call_stub ) (J=compiled Java代码、j=interpreted、Vv=VM代码) JavaThread:( =>当前线程) 0x0ab0c800 JavaThread“低内存检测器”守护进程_thread_blocked,id=1532,堆栈(0x0aec000x0af10000) 0x0ab0ac00 JavaThread "CompilerThread0“守护进程_thread_blocked,id=7304,堆栈(0x0ae70000,0x0aec0000) 0x0aafe000 JavaThread "JDWP命令读取器”守护进程_thread_blocked,id=6836,堆栈(0x0ae200000x0ae70000)堆栈(0x0ad800000x0add0000) 0x0aaee800 JavaThread“附加侦听器”守护进程_thread_blocked,id=2020,堆栈(0x0aca000x0acf0000)0x0aed400 JavaThread“信号调度员”守护进程_thread_blocked,id=7492,堆栈(0x0ac500000x0aca0000) 0x0aada400 JavaThread“终结器”守护进程_thread_blocked,id=5400,堆栈(0x0ac00000,0x0ac50000) 0x0aad8c00 JavaThread“引用处理程序”守护进程_thread_blocked,id=5772,堆栈(0x0abb0000,0x0ac00000) =>0x002b8000 JavaThread“主”_thread_in_native,id=7020,堆栈(0x008c0000,0x00910000) 其他线程: 0x0aad5400 VMThread堆栈:0x0ab600000,0x0abb0000 0x0ab0f000 WatcherThread堆栈: 0x0af10000,0x0af60000 VM状态:不在safepoint (正常执行) 当前由线程拥有的VM Mutex/Monitor :无 堆总数960K,从空间64K使用793K [0x029c0000,0x02ac0000,0x02e0000) eden空间896K,88%使用[0x029c0000,0x02c0000,0x02a0000,0x02a0000],使用空间64K(0x02a0000,0x02a0000,0x02ab0000)到空间64K,0%使用[0x02ab0000,0x02ab0000,0x02ac0000,0x02ac0000,0x026K,使用0K [0x02ea0000,0x032a0000,0x069c96K]空间使用40K[0x02x0000,0x0x0000,0x069c96K]。18%使用[0x069c0000,0x06bead18,0x06beae00,0x075c0000]没有配置共享空间。

我尝试过添加-Xmx选项,但认为这可能不是解决方案。有什么建议吗?

提前谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-09-09 17:46:43

你的JVM崩溃了,-Xmx也帮不上忙。您能尝试使用-Xint运行并查看是否可以重现问题吗?这将告诉JVM在没有热点的情况下运行,这意味着没有动态编译优化。您使用哪个版本的JVM运行?如果您不能重现-Xint的问题,并且正在使用最新的JVM,则可以尝试将magick.MagickImage.writeImage排除在编译之外。

若要排除,请在应用程序工作目录中创建一个文件,名为:

代码语言:javascript
复制
.hotspot_compiler 

加上一行:

代码语言:javascript
复制
exclude magick/MagickImage writeImage
票数 4
EN

Stack Overflow用户

发布于 2011-09-09 18:00:55

如果怀疑这是内存问题,那么使用-XX:+HeapDumpOnOutOfMemoryError选项运行应用程序。如果应用程序由于OOME而崩溃,这将创建堆转储。然后,您可以使用jhat或eclipse等工具来分析堆转储。

您还可以使用jmap生成正在运行的应用程序的堆转储,并使用上面建议的工具查看内存消耗情况,以确保您的怀疑。

票数 2
EN

Stack Overflow用户

发布于 2014-12-11 23:22:36

我发现你需要销毁你创建的每一个图像副本。否则,您将创建内存泄漏。它正在使用JNI,我认为存在需要释放的恶意代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7364873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档