【发布时间】:2016-10-22 15:27:01
【问题描述】:
我是 Java 新手,所以如果这是一个愚蠢的问题,请放轻松。
几天前我刚开始使用 Java,我做的第一件事是为 MySQL 构建一个帮助类。我正在使用DriverManager 连接到 MySQL,它没有问题。我还有一个帮助类来关闭ResultSet、Statement 和Connection。这是它的一个sn-p。
this.result.close();
this.statement.close();
this.connection.close();
我单独关闭每个对象,并在完成后将它们设置为null。
我担心的是,在测试中,我使用Runtime 来测试整个应用程序的内存使用情况,关闭上述对象并将它们设置为null 似乎对Runtime 显示的内存使用情况没有任何影响。这是我确定内存使用情况的代码。
System.out.println("Memory Used: " + (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()));
我的问题是:为什么,当我在对象仍在范围内以及程序结束时显示使用的内存时,内存似乎永远不会被释放?这是我的对象关闭方式的问题,还是使用的实际内存没有像Runtime
【问题讨论】:
-
这可能就像 Java 中的对象在 jvm 认为有必要之前不会被垃圾回收一样简单,即使您调用 system.gc()。您可能会尝试调用 gc() 作为测试的一部分,但这可能也不会这样做。当 jvm 进行垃圾收集时,您可能会重新研究。 IIRC 有很多因素会影响这一点。