Java Deallocation

时间:2017-09-14 20:35:15

标签: java memory-management garbage-collection ram

我有一个运行JavaFX的程序,其中包含Item类对象的ListView。单击该项时,它会拉出一个单独的窗口以显示该对象的信息。每次我关闭项目窗口并打开另一个窗口时,它只会添加使用过的ram,而且我的系统相对比较紧张。当用户单击红色X时,如何将Item和ItemWindow对象取消引用?

我在ItemWindow类中的代码如下:

Parent root;
       Scene scene;
     stage.setOnCloseRequest(new EventHandler<WindowEvent>() {

            @Override
            public void handle(WindowEvent event) {
                System.out.println("UR tryna close meh!");
                item.close();
                stage.close();
                System.gc();
            }
     });

我在Item类中的close()方法:

public void close() {
    date_purchased=null;
//      price_bought=(Double) null;
//      width=(Double) null;
//      length=(Double) null;
//      item_num=(Long) null;
    palette=null;
    label=null;
    designer=null;
    care=null;
    name=null;
    other=null;
    picURL=null;
    placeBought=null;
    description=null;
    layout=null;
    itsAt=null;
    itIs=null;
}

每当我打开一个项目并关闭它时,当我再次执行它时,它会打开更多的ram,直到我有超过一半的演出投入到该程序中。

编辑: 我拿了一个堆转储,(授予我新手),它显示了这个:

One instance of "java.nio.HeapByteBuffer" loaded by "<system class loader>" occupies 52,633,864 (87.66%) bytes. The instance is referenced by Manager.ItemWindowController @ 0xc51ea6f8 , loaded by "sun.misc.Launcher$AppClassLoader @ 0xc1f45008". The memory is accumulated in one instance of "byte[]" loaded by "<system class loader>".

Keywords
byte[]
sun.misc.Launcher$AppClassLoader @ 0xc1f45008
java.nio.HeapByteBuffer

进一步说,有一个byte []在堆上使用52,633,816,其值为&#34; ........................ ............................&#34;(等)

0 个答案:

没有答案