删除Java中的一部分数组以释放堆上的内存

我正在为Java中的背包问题实现动态编程算法。 我声明了数组,然后将其大小初始化为[对象数] [背包的容量]。

当我的对象数量或容量变得太大时,我会收到内存错误,因为堆上的空间不足。 我的问题是:如果我继续删除双数组中的行,Java会在删除时释放内存吗? 或者Java是否保留了我最初创建的数组大小的内存空间? 如果是后者,有没有办法在Java中手动释放内存?

谢谢你的帮助!

简短的回答是“是” – 如果你使用这样的数组:

private void foo () { int[][] bar = new int[10][10]; bar[1] = null; //at this point, the array that was in bar[1] is eligible for garbage collection //unless someone else has a reference to it } 

它应该稍后释放内存,不一定要删除行。 然而,它会将该内存重用于新数据。

可能你正在使用小ram,尝试增加它使用:

 java -Xmx128m you.app.Main 

这将运行你的应用程序与128 MB的RAM。

是的有效。 Java没有多维数组,只有锯齿状数组(数组数组)。 所以第一个数组基本上只是指向真实内容数组的指针数组。

这具有积极的效果,无论何时将新arrays分配给其中一个锯齿状区域,旧的arrays都可以进行垃圾回收。 (参见Sbodd的答案)

它不可能从数组的一部分释放内存…因为在java中你不能从数组中删除元素..而不是它你可以横向该数组而不是存储到另一个所需大小的数组….