我们有一个服务器(
Java EE)应用程序,它将根据用户请求执行一些图像处理作业.例如将图像格式(例如TIFF转换为JPEG),将图像颜色(例如RGB转换为灰色转换为BW),重采样(调整大小)图像转换.来自印刷行业的一些客户使用非常大的图像,例如2000 dpi,6 * 8英寸,4色组件,这将占用6 * 2000 * 8 * 2000 * 4 = 768MB内存.服务器无法将大图像保存在内存中,因此我们决定按条带进行条带化处理.问题是仍然无法工作,因为可能同时有许多客户.您对如何实现内存限制图像处理有任何想法吗?或者,您知道是否有一些纸/文章可以为我们提供解决方案.
谢谢,
最佳答案 我建议考虑将图像处理部分移动到一个单独的JVM,您可以使用RMI或类似工具从主应用程序进行通信.
这允许您将处理JVM与主JVM分开调整,甚至可以在多台机器上创建分布式系统(如果需要).这也可能允许您管理转换,以便只有少数同时发生允许更大的单个图像.
是否有任何限制可以阻止你这样做?
作为最后的手段,我建议将实际的图像转换移动到本地程序,如Linux上的ImageMagick,然后由程序调用,进行转换,并让您的JVM将结果发送给用户.这可以说是更快的cpu并且需要更少的内存.