如何清理这个Java示例内存
我正在阅读Java中的垃圾收集和终结,当我尝试一个示例时。我点击按钮1,记忆就会跳起来。但当我点击按钮2时,内存并没有释放出可用的空间! 我做错了什么?如何从未使用的对象中释放内存
据我所知(我可能错了):
- 当同一个变量被一次又一次地重新实例化时,旧对象将被销毁李>
- 当我将变量设置为null时,旧对象将被销毁李>
- 数组单元格为空值。当父数组对象没有引用它的变量时,它们将被销毁李>
- 如何释放收藏?数组规则如何应用李>
代码:
public class Memory extends javax.swing.JFrame {
Object[] object;
private void Button1ActionPerformed(java.awt.event.ActionEvent evt) {
object = new Object[10240000];
}
private void Button2ActionPerformed(java.awt.event.ActionEvent evt) {
object = null;
System.gc();
System.runFinalization();
//OR
System.runFinalization();
System.gc();
}
}
# 1 楼答案
System.gc()
只是建议JVM清理内存。它可能接受也可能不接受这个建议。你没有做错什么。放松# 2 楼答案
Java最终会清除未使用的对象,这就是垃圾收集器的用途。你不必担心它,也不必为它编写任何代码
Java中的GC是周期性的,它不是即时的,而是系统。gc()只建议应该运行gc,这可能不会发生
如果你想看到java GC的运行,你应该尝试一个运行时间更长的程序,看看内存和GC的运行情况
当同一变量被越来越多地重新初始化时,旧对象将被销毁
将变量设置为null时,旧对象将被销毁
数组单元格是空值,当父数组对象没有引用它的变量时,它们将被销毁
如何释放集合或应用数组规则
这四点的答案都是:垃圾收集器会处理好的
即使垃圾收集器可能运行过,内存仍然很高的另一个原因是JVM占用的内存比对象多