Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java BuffereImage泄漏-是否有其他选择?_Java_Image_Memory Leaks_Bufferedimage - Fatal编程技术网

Java BuffereImage泄漏-是否有其他选择?

Java BuffereImage泄漏-是否有其他选择?,java,image,memory-leaks,bufferedimage,Java,Image,Memory Leaks,Bufferedimage,我在BuffereImage方面遇到了奇怪的问题,在某些情况下,它会消耗所有可用的系统内存3GB,1.5GB 我已经创建了一个简单的包装器,使用方法如下: public ImageWrapper(final byte[] bytes) throws ImageWrapperException { this(new ByteArrayInputStream(bytes)); } public ImageWrapper(final ByteArrayInputStream bis) t

我在BuffereImage方面遇到了奇怪的问题,在某些情况下,它会消耗所有可用的系统内存3GB,1.5GB

我已经创建了一个简单的包装器,使用方法如下:

public ImageWrapper(final byte[] bytes) throws ImageWrapperException {
    this(new ByteArrayInputStream(bytes));
}



public ImageWrapper(final ByteArrayInputStream bis) throws ImageWrapperException {
    try {
        image = ImageIO.read(bis);
        bis.close();
    } catch (IOException e) {
        throw new ImageWrapperException(e);
    }
}
我已经用jsut验证过,即使使用image=ImageIO.readfile也会发生这种情况

我不会得到任何异常,直到第一个无法分配内存

由于某些原因,在读取特定类型的图像时,图像的读取最终将消耗所有系统内存。我说的不是堆,而是系统内存

它只发生在某些环境中——它不会发生在我的OSX上,但会发生在我的Debian服务器上

你知道为什么会这样吗? BuffereImage是否有其他更好的替代方案? 有问题的机器是一个虚拟服务器。这可能是由其配置引起的吗? 谢谢

编辑:

示例图像: 这只是第一个也是唯一一个产生这种现象的例子。 我刚刚验证了:image=ImageIO.readfile;-我开始想,它一定是Java之外的东西——一些有缺陷的本机库。。。 编辑2:

所以问题在于文件系统——我有一个7GB的目录,里面有数千个图像。当我试图读取一个文件时,它会消耗所有的内存——我想这是某种文件系统问题

尝试将代码移动到java.nio和内存映射文件访问。这些存储在堆外

这很有趣。

尝试将代码移动到java.nio和内存映射文件访问。这些存储在堆外


这很有趣。

BuffereImage肯定有问题-我在两台服务器上测试了它,结果相同-系统完全内存不足


最后,我在PHP上编写了一个简单的包装器,现在我使用GD进行图像处理。现在一切正常。谢谢你的建议

BuffereImage肯定有问题-我在两台服务器上测试过,结果都是一样的-系统内存完全不足


最后,我在PHP上编写了一个简单的包装器,现在我使用GD进行图像处理。现在一切正常。谢谢你的建议

存在一些与ImageIO.read和BuffereImage相关的已知错误


存在一些与ImageIO.read和BuffereImage相关的已知错误


什么类型的图像?你能发布一个这样的图像的二进制1:1副本吗?您如何在周围的代码中使用ImageWrapper,有多少实例,等等。?请发布更多的代码。特别是如果您调整大小,请使用第一个可用于图像类型的ImageReader将ImageIO.read拆分为。这避免了BuffereImage内存的使用。顺便说一句,在最后一个街区结束。菲利普:看我的更新。Joop:即使不进行任何大小调整或保存,也会发生这种情况。即使我没有做bis.close,我也看不出任何原因,为什么进程会消耗1.5 GB的内存。@Vojtěch:您如何准确地衡量内存使用情况?Linux上的内存测量并不像看上去那么简单……你是说,如果你编写的类有一个main方法public static void mainString[]args{Image Image Image=ImageIO.readargs[0];}并传入你链接的图像的文件名,它会为你复制这个吗?什么特定类型的图像?你能发布一个这样的图像的二进制1:1副本吗?您如何在周围的代码中使用ImageWrapper,有多少实例,等等。?请发布更多的代码。特别是如果您调整大小,请使用第一个可用于图像类型的ImageReader将ImageIO.read拆分为。这避免了BuffereImage内存的使用。顺便说一句,在最后一个街区结束。菲利普:看我的更新。Joop:即使不进行任何大小调整或保存,也会发生这种情况。即使我没有做bis.close,我也看不出任何原因,为什么进程会消耗1.5 GB的内存。@Vojtěch:您如何准确地衡量内存使用情况?Linux上的内存测量并不像看上去那么简单…你是说如果你编写一个类,它有一个main方法public static void mainString[]args{Image Image=ImageIO.readargs[0];}并传入你链接的图像的文件名,它会为你复制这个吗?问题不在堆中,本机代码中存在一些问题,因为整个系统内存不足。问题不在堆中,本机代码中存在一些问题,因为整个系统内存不足。