我改进了我的代码,以便从垃圾收集器中获得更好的结果。
现在,当我调用 System.gc()
时,它会释放所有内存。但是,当我在不调用 System.gc()
的情况下观察内存使用情况时,应用程序确实会保留并使用越来越多的内存。
这是否意味着我的改进正在发挥作用并且我的所有引用都正确并且我可以忽略 JVM 如何自行释放内存。或者我的代码中是否还有其他问题导致 JVM 在不运行垃圾收集器的情况下保留更多内存。
最佳答案
取决于您的 JVM 使用的是哪个 GC。 如果它是 JDK9 那么它可能是 G1,它在内存消耗方面是“贪婪的”, 因此,根据您检查内存使用情况的方式,它看起来好像占用了大量内存(因为这是保留它并动态使用/释放/按需释放。
你可以使用
https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstat.html
检查内存消耗。
至于 GC 和内存消耗分析,请查看以下内容: High memory usage issues with G1 Garbage collector + https://www.javacodegeeks.com/2017/11/minimize-java-memory-usage-right-garbage-collector.html
关于java - 强制 JVM 释放内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54267714/