Java - 关闭所有对象后的 JDBC 内存使用

标签 java mysql memory jdbc

<分区>

我是 Java 的新手,所以如果这是一个愚蠢的问题,请放轻松。

我几天前才开始使用 Java,我做的第一件事就是为 MySQL 构建一个帮助类。我正在使用 DriverManager 连接到 MySQL,它没有问题。我还有一个辅助类来关闭 ResultSetStatementConnection。这是它的一个片段。

this.result.close();
this.statement.close();
this.connection.close();

我分别关闭每个对象,并在完成后将它们设置为 null

我担心的是,在测试中,我使用 Runtime 来测试整个应用程序的内存使用情况,关闭上述对象并将它们设置为 null 似乎没有任何意义关于 Runtime 显示的内存使用情况。这是我确定内存使用情况的代码。

System.out.println("Memory Used: " + (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()));

我的问题是:为什么当我显示对象仍在范围内以及程序结束时使用的内存时,内存似乎永远不会被释放?这是我的对象关闭方式的问题,还是实际使用的内存未按我认为的运行时

正确方式反射(reflect)

最佳答案

将它们设置为空是不必要的。垃圾收集器比你更了解范围。

你很好地关闭了它们,但它们应该在单独包装的 try/catch block 中完成。如果第一个抛出异常,您将永远不会关闭后面的其他异常。

您对不太可能重要的事情担心太多。不确定 JVM 何时会将释放的内存返回给操作系统,或者您的工具是否会检测到它。重要的是垃圾收集器正常工作。

此方法不会自行杀死内存。您更有可能在代码的其他地方发现问题。继续使用 Visual VM 进行分析以找到它们。

关于Java - 关闭所有对象后的 JDBC 内存使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40193834/

相关文章:

java - 我的应用程序在启动之前崩溃了。这是一个简单的应用程序,我在其中使用 Intent 来调用前一个类中的另一个类

java - 如何等待 HttpURLConnection 完成?

php - 如何从有条件的表中选择所有数据?

c# - 如何在大量数字中找到平均值?

java - 使用自定义 SSL 配置启动 WebLogic 服务器

java - 过滤 Criteria list() 中的实体

mysql - 保存查询和优化数据库

php - 将平面 json 转换为像 json 一样的 TreeView

C# 性能因内存而异

memory - 计算对内存的读写访问