【问题标题】:How to Clear Resource Leaks?如何清除资源泄漏?
【发布时间】:2020-11-11 05:25:44
【问题描述】:
我有一个我一直在测试的 Java 代码,该代码使用扫描程序类而不关闭它。我知道这会导致内存泄漏,并且即使在代码完成执行后,扫描器资源在代码执行期间占用的内存仍然被扫描器资源占用。我知道关闭扫描仪有助于防止这个问题,但是在没有关闭扫描仪类的情况下测试代码的时候,重新启动计算机是否会释放扫描仪类在代码执行后没有关闭时占用的内存?
【问题讨论】:
标签:
java
memory
memory-leaks
java.util.scanner
resource-leak
【解决方案1】:
您不需要重新启动整个计算机。每当您的 Java 应用程序结束时,所有占用的内存都会归还给操作系统。
【解决方案2】:
扩展Stephans 答案:
因此,据我了解,当启动 Java 程序(应用程序或其他)时,会实例化 Java 虚拟机(JVM)。这将提供和消耗您的程序所需的所有内存等。当 Scanner 类正在扫描文件时,它会向 JVM 询问文件句柄(这些是在 Scanner 关闭时返回的东西),这些可能会用完 - 这就是你需要关闭 Scanners 的原因(或使用Java 8+ 尝试使用资源)。
需要重启的是JVM,而不是运行JVM的电脑。