有 Java 编程相关的问题?

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

Java:修复内存泄漏

我的java游戏应用程序中有一个内存泄漏,这是我所期待的。泄漏源于在该按钮操作侦听器上多次创建的新实例,因为每次我按下按钮,它都会创建一个RegularMode的新实例:

btnRegular.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        frame.remove(pane);
        gm = Gamemode.REGULAR;

        mode = new RegularMode(frame, WIDTH, HEIGHT);
    }
});

有趣的是,我一直在尝试修复内存泄漏,使用以下代码:

public static void initDisplay() {
    gm = Gamemode.NONE;
    mode.setRunning(false);
    frame.remove(mode.getPane());
    frame.add(pane);
    frame.validate();
    frame.repaint();
    mode = null; // THIS LINE
    frame.pack();
}

–但它不起作用。有没有其他方法可以解决这种类型的内存泄漏


共 (2) 个答案

  1. # 1 楼答案

    您可以在将mode设置为null之后尝试添加对System.gc()的调用

    您还可以尝试使用不同于默认值的垃圾收集器。为此,请在运行应用程序时传入-XX:[Garbage collector](例如-XX:ConcMarkSweep)。如果您在Eclipse中,则必须在项目配置中设置此参数(传递给JVM的参数)。有可用收集器的列表here

    您还可以增加jvm可以使用的内存量上限,默认值为256mb。要做到这一点,您必须输入-xmx1024M(或类似的东西)

    希望这有帮助