如何在Java中释放内存

时间:2017-04-15 13:31:28

标签: java

我有这段代码

A = new int[100];
B = new int[100];
C = boolean[100];

for(int i=1;i<=10000000;i++)
{
     A = new int[100];
     B = new int[100];
     C = boolean[100];

     // Do Something

     // Now i don't need A,B,C Array
}

我使用内存创建数组的次数,我可以有效地使用内存吗?我不需要以前的阵列,我只需要当前的阵列。

我不想使用任何额外的内存来存储以前的数组?我的代码内存是否有效?

1 个答案:

答案 0 :(得分:8)

只要ABC超出范围,这些就有资格进行垃圾回收。在您的示例中,它表示for语句的末尾。

现在,如果这些变量没有被任何其他变量引用,那么您可以在使用它们后立即对它们进行垃圾收集,而不必等待for语句的结束,方法是将它们设置为{{1} };

null

这并不意味着它现在会释放内存,但至少这些对象在下一个GC集合中将被视为未使用。

编辑

最近的JVM版本在运行时(JIT)执行多个优化 您可以在Oracle网站上找到有关Just-In-Time Compilation and Optimization的一些解释 您也可以在同一页面some examples of JRockit optimizations runtime找到。

因此,根据使用的JVM版本,对 A = new int[100]; B = new int[100]; C = boolean[100]; // processing where these are required ... // processing where these are not required A = null; B = null; C = null; 的赋值可能没用,因为只要这些对象在其范围内不再使用,JVM可能会认为这些对象超出了范围,因此null声明的结尾。

The Stephen's answer足够接近的问题表明了这一点 不幸的是,我没有找到任何有关此特定优化的具体信息。