JNI-hazard问题
JMagick使用JNI技术调用ImageMagick,存在JNI-hazard问题。不适合在长时间运行的Web应用程序使用ImageMagick +Jmagick,可能导致JVM崩溃。
我就在项目中遇到过,Tomcat在跑了数天后会crash,异常内容为:magick.MagickException: Unable to retrieve handle 。
从表象看,应该是没有释放ImageMagick的句柄导致的,查找API后发现程序中没有调用:magick.MagickImage.destroyImages() Called by finalize to deallocate the image handle。 在程序加上本方法,情况有所改善,大概在十多天后出现了一次tomcat进程crash。并不能根本解决问题。
建议使用IM4JAVA。
在JMagick的邮件列表中找到一份我认为有价值的邮件
The "JNI hazard" here is that if something you use (f.ex libtiff for reading TIFF files) has a memory bug then it can make your whole JVM crash. Thats of course frustrating and therefore its great to have im4java around, which starts IM as an external process, so JVM crashes are avoided. * * Coolest thing would be if JMagick and im4java could have the same API so it was easy to switch depending on luckyness. Ive asked the author of im4java to attemt to be as compatible as possible, but as im4java is very much different internally its limited how much can be done in that direction. If you don't like the risk, stick to im4java. If your want optimal performance give JMagick a try. And, its not JMagick that is buggy, its what it depends on (hereunder IM) that is not always (memory) bug free on long running processes. I also have never seen a mismatch between JMagick binary and ImageMagick binaries leading to crashes.
IM4JAVA官方文档也有相关说明:
1.1. What exactly do you mean with JNI-hazard? Running native code using JNI from within java always imposes additional risks. The JVM is no longer sandboxed, so there might be some security issues. In addition, there could be errors like memory leaks or memory corruption within the JNI-layer (JMagick) or within the native code (ImageMagick). This is especially dangerous for long running processes (typically web-application-servers). Memory corruption or a segmentation fault (maybe triggered by a intentionally manipulated image) might bring down the whole server. On the other side, in reality the situation is not as bad as it sounds above. JMagick is well tested, and for standard use-cases it prooves to be very stable. Some additional information is available on the JMagick-users mailing list where this topic has been discussed to some detail.
相关推荐
JMagick,一个与标题“jmagick-win-6.3.9”相对应的工具,是Java平台上的一个强大扩展,它为Java开发者提供了一个方便的接口来操作ImageMagick库,从而实现高效的图像处理功能。本文将深入探讨JMagick的特性和应用...
标题中的"jmagick-6.2.4-1-IM-6.2.5.jar"和"ImageMagick-6.2.5-4-Q16-windows-dll.exe"分别指的是JavaMagick库和ImageMagick软件的不同版本。这两个组件在IT领域中扮演着重要的角色,特别是对于图像处理和转换。 **...
JMagick-6.0.4-0.tar 下载
JMagick是一个开源API,利用JNI(Java Native Interface)技术实现了对 ImageMagick API的Java访问接口,因此也将比纯Java实现的图片操作函数在速度上要快。
标题中的"jmagick-6.2.4-1-IM-6.2.5.zip"指的是JMagick的一个特定版本,这是一个Java绑定的ImageMagick库,用于处理图像操作和转换。ImageMagick是一个开源的跨平台命令行工具集,广泛用于在各种文件格式之间进行...
《JMagick-5.5.6-0:Java Web中的图形处理利器》 在Java Web开发中,图像处理是一项不可或缺的功能,无论是用于网站设计、数据可视化还是用户上传的图片管理,都需要高效的图像处理库来支持。JMagick-5.5.6-0.tar....
"jmagick-win-5.5.7-Q8.zip"这个压缩包中包含了在Windows环境下运行JMagick所需的所有组件,包括核心库文件"jmagick.dll"、Java类库文件"jmagick.jar"以及ImageMagick的安装程序"ImageMagick-5.5.7-Q8-windows-dll....
《JMagick:Java图像处理的强大工具》 在IT领域,图像处理是一项不可或缺的技术,尤其在网站开发、移动应用和数据分析等方面。JMagick作为Java平台上的一个图像处理库,为开发者提供了强大的功能,使他们能够高效地...
下载ImageMagick-6.3.9-0-Q8-windows-dll.exe和jmagick-win-6.3.9-Q8.zip 安装ImageMagick-6.3.9-0-Q8-windows-dll.exe,按照网上说法把安装后根目录下的所有.dll文件拷贝到C:\WINDOWS\system32下。不过没拷贝成功。...
tar xzvf jmagick-6.4.0.tar.gz (# chmod * 否则这个包内的文件无权限执行) autoconf ./configure --prefix=/opt/JMagick --with-magick-home=/opt/ImageMagick --enable-share --enable-static --with-java-home=...
3. 解压缩JMagick的ZIP文件,找到`jmagick-<version>.dll`文件并将其复制到Java的`bin`目录下。 4. 设置环境变量`JMAGICK_HOME`指向JMagick的安装目录。 5. 设置系统路径环境变量,添加`%JMAGICK_HOME%\bin`。 6. ...
安装包列表: ImageMagick-6.2.6-8.tar.gz、JMagick-6.2.6-0.tar.gz、 用户支持jpg,png和tiff格式的文件,还需安装如下插件 jpegsrc.v6b.tar.gz、 libpng-1.2.10.tar.bz2、tiff-3.8.2.tar.gz
Java程序通过JNI(Java Native Interface)调用这个库中的函数来执行图像处理任务。32位和64位的Jmagick.dll是不兼容的,因此选择正确的版本至关重要,否则会导致运行时错误。 - **Jmagick.jar**:这是Jmagick的...
在"jmagick-6.4.0.jar"中,这是JMagick的Java库文件,开发者可以在Java项目中引入这个JAR包,以便调用JMagick提供的API进行图像处理。例如,你可以创建一个` MagickImage `对象来表示图像,然后使用` read `方法读取...
里面包括jmagick 所需所有文件,jmagick.dll,jmagick.jar 还有安装文件, 以及linux安装说明! jmagick jmagick.jar jmagick资料 jmagick缩略图 jmagick jmagick.jar jmagick资料 jmagick缩略图
结合这个“ImageMagick-6.3.9+jmagick组合”,开发者可以在Java环境中利用ImageMagick 6.3.9的强大功能,无需担心兼容性和稳定性问题。这在开发基于Java的图像处理应用时尤其有用,例如在线图片编辑服务、自动化图像...
安装完成后,可以将JMagick(如`jmagick-win-6.3.9-Q16.zip`)集成到Java项目中,利用其提供的API进行图像处理操作。 `使用说明.txt`和`安装说明.txt`文件分别提供了详细的步骤指导,帮助用户了解如何正确安装和...
通过 JMagick,Java 开发者可以利用 C++ 编写的 ImageMagick 库的强大功能,无需直接编写原生代码或使用 JNI(Java Native Interface)。 **JMagick 的安装与配置** 在使用 JMagick 之前,需要先确保已经正确安装...
**JMagick安装与配置详解** JMagick是一款强大的Java接口,它允许Java应用程序与ImageMagick图像处理库进行交互,从而实现丰富的图像操作功能。本文将详细介绍如何在Java环境中安装和配置JMagick,以及如何使用提供...
内容:【ImageMagick-6.3.9-0-Q16-windows-dll.exe安装文件】【jmagick-win-6.3.9-Q16内有jar包和dll文件】【java代码示例】 用法: 1、先安装ImageMagick,重启电脑。 2、将jmagick.dll文件拷贝到JAVA_HOME\bin目录...