我正在阅读Java中的垃圾收集和定稿,当我尝试一个例子时。我点击按钮1,内存跳了起来。但是当我点击按钮2时,内存并没有释放已用空间! 我做错了什么以及如何从未使用的对象中释放内存?
据我所知(我可能错了):
代码:
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();
}
}
答案 0 :(得分:1)
System.gc()
仅是JVM清理内存的建议。它可能会也可能不会采纳这个建议。你没有做错任何事。放松。
答案 1 :(得分:0)
Java将最终清除未使用的对象,这就是垃圾收集器的用途。您不必担心它或为其编写任何代码。
GC定期使用Java并且它不是即时的,System.gc()只建议GC应该运行,这可能不会发生。
如果你想看看java GC的运行情况,你应该尝试一个运行时间更长的程序,看看内存和GC的运行情况。
当相同的变量被重新启动时,旧对象将被销毁。
将变量设置为null时,旧对象将被销毁
当父数组对象没有引用它的变量时,数组单元格是空值,它们将被销毁
如何释放集合或数组规则?
对所有四点的回答是:垃圾收集器会处理这个问题。
即使垃圾收集器可能运行,内存仍然很高的原因是JVM占用的内存不仅仅是对象。