有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何清理这个Java示例内存

我正在阅读Java中的垃圾收集和终结,当我尝试一个示例时。我点击按钮1,记忆就会跳起来。但当我点击按钮2时,内存并没有释放出可用的空间! 我做错了什么?如何从未使用的对象中释放内存

据我所知(我可能错了):

  1. 当同一个变量被一次又一次地重新实例化时,旧对象将被销毁
  2. 当我将变量设置为null时,旧对象将被销毁
  3. 数组单元格为空值。当父数组对象没有引用它的变量时,它们将被销毁
  4. 如何释放收藏?数组规则如何应用

代码:

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();
    }
}

共 (2) 个答案

  1. # 1 楼答案

    System.gc()只是建议JVM清理内存。它可能接受也可能不接受这个建议。你没有做错什么。放松

  2. # 2 楼答案

    Java最终会清除未使用的对象,这就是垃圾收集器的用途。你不必担心它,也不必为它编写任何代码

    Java中的GC是周期性的,它不是即时的,而是系统。gc()只建议应该运行gc,这可能不会发生

    如果你想看到java GC的运行,你应该尝试一个运行时间更长的程序,看看内存和GC的运行情况

    1. 当同一变量被越来越多地重新初始化时,旧对象将被销毁

    2. 将变量设置为null时,旧对象将被销毁

    3. 数组单元格是空值,当父数组对象没有引用它的变量时,它们将被销毁

    4. 如何释放集合或应用数组规则

    这四点的答案都是:垃圾收集器会处理好的

    即使垃圾收集器可能运行过,内存仍然很高的另一个原因是JVM占用的内存比对象多