java - 在特定时间点释放 Java 内存

标签 java memory garbage-collection

根据这段代码,我们加载大量数据,将其写入文件,然后运行 ​​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 编译器非常聪明。它可以告诉 stuffcreateFileInput(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/

相关文章:

c - 字符串未正确存储在结构中

c++ - C++ Cygwin 中的堆大小

python - 如何在 python 中创建无法收集的垃圾?

c - 在多个线程中独立运行 Boehm GC

java - 寻找 Java 聪明的任务调度器和执行器

java - android中奇怪的内存分配

java - 无法扩展MapActivity类?

java - JTextPane 和正则表达式的问题

python - python字符串比较的内存限制

java - 发布类加载器引用失败