根据这段代码,我们加载大量数据,将其写入文件,然后运行 exe..
void myMethod() {
Map stuff = createMap(); //Consumes 250 MB memory
File file = createFileInput(stuff); //Create input for exe
runExectuable(file); //Run Windows exe
}
在运行 exe 之前释放 stuff
消耗的内存的最佳方法是什么?我们不再需要内存中的数据,因为我们已将数据转储到文件中以输入到 exe...
最好的方法是在 runExecutable(file)
之前设置 stuff = null
吗?
最佳答案
可能最好的答案是:什么也不做。
Java 编译器非常聪明。它可以告诉 stuff
在 createFileInput(stuff)
之后不再需要,并重写代码以确保它是 GCable 的。如果您想 100% 确定,可以将其设置为 null,但编译器可能已经为您完成了该操作。将其设置为 null 并不能保证它会被 GC 回收。
首先尝试进行一些分析,我想您会发现内存已经被释放。天真地检查代码来查找您认为存在内存问题的地方很少会得到好的结果。获取一些数据。
编辑:请注意,编译器可以是 javac
或 JIT 编译器。两者都非常了解此类事情,并进行各种您无法想象的优化。底线:编写干净的代码,然后对其进行分析并从那里进行优化。
EDIT2:对于那些对 JVM 处理内存的技巧感兴趣的人,我强烈推荐这个博客(它很好地解释了这个特定问题):http://jeremymanson.blogspot.com/2010/02/garbage-collection-softreferences.html
关于java - 在特定时间点释放 Java 内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2516723/