我在Windows上使用Fiji/ImageJ并遇到以下问题:当我关闭文件时,不会释放为该文件分配的内存.ImageJ保留分配的内存,并在打开其他文件时重用它.
所以这不是严格意义上的内存泄漏,但仍然非常烦人,尤其是在处理大文件时.图像关闭后是否有手动或(最好)自动方式触发垃圾收集?
编辑:
示例:我使用大文件和Windows任务管理器来检查内存分配.
我的问题是我通常会用一些文件和窗口打开斐济.然后我打开一些大文件并最终关闭它们,但ImageJ仍保留我的记忆.然后我开始执行一个内存饥饿的工作,我很快耗尽内存,当Windows开始交换东西时整个系统挂起.
java是否将未使用的内存返回给OS取决于使用的垃圾收集器.一些实现确实返回它,而在某些实现中,堆只会继续增长.默认情况下使用哪个垃圾收集器在各种JRE版本中有所不同,并且还取决于系统.
启动java时,可以强制命令行参数使用垃圾收集器.要将ImageJ的已用gc更改为返回未使用内存的gcs之一,请ImageJ.cfg在ImageJ安装目录和第三行add中编辑文件-XX:+UseParNewGC.
对于斐济来说,运行斐济发射器并-XX:+UseParNewGC加入命令行参数,即ImageJ-win64.exe -XX:+UseParNewGC --
在我的64位Java 8系统上,这会导致内存被释放回操作系统.这是ImageJ在导入大堆栈,重复几次,关闭它并运行垃圾收集器几次时的内存使用情况图:

请参阅这篇有用的文章,了解不同gcs在返回内存方面的行为方式.
| 归档时间: |
|
| 查看次数: |
8074 次 |
| 最近记录: |