释放由字节数组分配的内存的最佳方式是什么(Java中的new byte [size])?Java中的字节数组的空闲内存
回答
删除对该字节数组的所有引用。垃圾收集器将负责其余部分。
当创建Java中的一个新的byte [],你这样做
byte[] myArray = new byte[54];
释放它,你应该做的
myArray = null;
如果别的引用您的字节数组,像
yourArray = myArray;
您还需要将其他引用设置为null,如
yourArray = null;
在Java垃圾收集是自动的。如果JVM可以检测到整个程序不再能够访问一段内存,那么JVM将为您释放内存。
当感觉像JVM时,JVM将释放内存。作为几乎所有java程序的一阶近似,不要担心内存,不要担心,JVM会得到回报。 – 2010-06-04 13:10:56
通常,您不需要将引用设置为null以允许收集对象。如果你需要这样做,你的实现恕我直言,很可能是一个严重的问题。 – 2010-06-04 14:49:36
@彼得:取决于。如果你知道这个变量会比它所指的数组活得长得多,那么明确地设置它是有意义的。虽然这很少见。 – 2010-06-04 15:24:43
将所有对它的引用设置为null将使它成为Java自动垃圾收集的候选对象。你不能确定这需要多长时间才能发生。如果您确实需要立即明确回收内存,您可以拨打电话System.gc();
此外,只是要清除您可能不需要显式地将引用设置为空。如果引用超出范围,它们将自动被清空,例如一旦声明的方法执行完成,局部变量引用将被清零。因此,局部变量通常在应用程序运行时期间隐式释放。
System.gc()不立即回收内存。你只是告诉JVM“请,如果你喜欢它,也许你可以清理东西。”这只是一个建议。 – 2010-06-04 15:22:02
System.gc()不会强制GC。这仅仅是一个建议。这就像你的室友之间的差异,“老兄,这个地方是一个残骸,怎么了?”和你妈妈说“清理这个瞬间!”在大多数实现中,System.gc()仅仅是你的室友。 – 2010-06-04 15:23:15
@Jonathon @Jim我没有意识到这一点。 javadocs说:“运行垃圾收集器,调用gc方法表明Java虚拟机花费大量的工作来回收未使用的对象,以便使它们当前占用的内存可以快速重用,当控制从方法调用返回时,Java虚拟机机器尽最大努力从所有丢弃的物体中回收空间。“并以我的称呼它似乎立即运行的经验,但也许我错了 – Alb 2010-06-04 15:44:29
- 1. Java - FloatBuffers的空闲内存
- 2. 函数中的空闲内存
- 3. remove_if后的空闲内存
- 4. 负空闲内存
- 5. Spark错误:没有足够的空间在内存中缓存分区rdd_8_2!空闲内存是58905314字节
- 6. 表单关闭时的空闲内存
- 7. iphone动画之后的空闲内存
- 8. 使用单个函数的Delphi中的空闲内存和零
- 9. C++中的二维动态内存分配数组中的空闲分配内存
- 10. 将内存流读入字节数组
- 11. 读取Java中的C#字节数组
- 12. Lambda返回Java中的字节数组
- 13. 字节数组中的Java迭代位
- 14. Java从包含空格的字节数组创建字符串
- 15. 指向数组的空闲指针?
- 16. 外部空闲内存功能
- 17. Linux:好友系统空闲内存
- 18. 如何检测PermGen空闲内存
- 19. Apache进程空闲并进食内存
- 20. 保存字节数组中的SQL Server
- 21. 如何释放空闲SQL Server数据库使用的内存?
- 22. 空字节数组c#winrt
- 23. C数组和空字节
- 24. 使用ADO.NET读取内存中的Excel文件(字节数组)?
- 25. 如何将内存中的文件转换为字节数组?
- 26. 从WPF中的字节数组显示图像 - 内存问题
- 27. GWT从内存中的字节数组打开文件
- 28. 从内存中获取字节数组时的内存压缩异常
- 29. 存储字节数组的Java字符串
- 30. 我们如何节点承载指向某个位置的空闲内存
重新使用它。有史以来最好的解除分配。 – SyntaxT3rr0r 2011-02-06 22:46:18