Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.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堆空间(Java.lang.OutOfMemoryError)_Java_Heap_Javafx - Fatal编程技术网

Java堆空间(Java.lang.OutOfMemoryError)

Java堆空间(Java.lang.OutOfMemoryError),java,heap,javafx,Java,Heap,Javafx,在我的项目中,我有一个模块可以上传多个图像,并立即为其创建缩略图。对于上传,我使用JavaFX;对于创建缩略图,我使用Java 我在for循环中编写了上传代码和缩略图创建函数的调用。如果上载图像的数量超过五个,我将收到以下错误: Java heap space (java.lang.OutOfMemoryError) 只要有对这些图像的引用(在变量或内部列表或其他内容中),Java的自动垃圾收集器就不会清理它。您应该只在需要时加载它们,然后在处理完每个图像后立即将变量设置为null 图像非常大,

在我的项目中,我有一个模块可以上传多个图像,并立即为其创建缩略图。对于上传,我使用JavaFX;对于创建缩略图,我使用Java

我在for循环中编写了上传代码和缩略图创建函数的调用。如果上载图像的数量超过五个,我将收到以下错误:

Java heap space (java.lang.OutOfMemoryError)
只要有对这些图像的引用(在变量或内部列表或其他内容中),Java的自动垃圾收集器就不会清理它。您应该只在需要时加载它们,然后在处理完每个图像后立即将变量设置为null

图像非常大,Java可能会将它们解压为位图(如bmp文件,巨大),所以这并不奇怪

垃圾收集不是经常运行的(它每隔一段时间就会清理一次),所以如果您想让它现在运行(您不能强制它),您可以调用System.gc();。但垃圾收集速度很慢,因此可能会减慢处理速度

如果需要的话,你可以增加你的最大内存,但最好的做法是这样做


有了更多信息,我可以提供更详细的答案。

您可以尝试使用内存分析器查看代码/类/方法的哪个部分占用了更多内存。您可以从免费开始,也可以从JDK附带的免费开始

其他著名的探查器包括:

->


->

其中有递归调用吗?让我们看一些代码。您是否正在释放图像之后使用的内存?Java能做到这一点吗?你在使用什么技术?框架?不要接受异常!当它们发生时,您需要这些信息。@Rafe Ketterr:当对象不再被引用时,内存会被释放(或者更可能被重复使用)。非常感谢您的回答,您编写的JavaFX代码中的内存问题是来自于框架吗?
fgUrl = fc.getSelectedFiles();
for(fg in fgUrl) {
    try {
        System.gc();
        fileURL = "file:///{fg.toString()}";
        fileURL = fileURL.replace("\\", "/");
        def dt = DateTime{}.instant;
        var datetime = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss:SSS").format(dt);
        pic_url = datetime.replace("-", "_").replace(":", "_").replace(" ", "_");
        datetime = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(dt);
        f = new File("C:\\uploaded\\{pic_url}.jpg");
        uploadFile(fileURL, f,save_index,datetime,pic_url); // This function will save selected image in the working directory of the system.
        var resize_ob = new resizeImage(url.replace("file:///", ""),"C:/thumbnails/{pic_url2}.jpg");// This will call the java thumbnail creation function.
        save_index++;
    }
    catch(e:Exception) { }
}