java - 强制 JVM 释放内存

标签 java memory garbage-collection jvm

我改进了我的代码,以便从垃圾收集器中获得更好的结果。

现在,当我调用 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/

相关文章:

java - 添加整数但选择最接近我想要的数字

java - 打印最大频繁元素

java - Apache-Kafka-Connect 、 Confluence-HDFS-Connector 、 未知魔法字节

C++ (Windows) vector 怎么会弄错内存?

multithreading - Haskell/GHC 每线程内存成本

java - j2ee应用程序中涉及循环引用和数组的内存泄漏

java - 无法使用 getApplication 方法转换为 Application

file - Cortex-M3 闪存限制

java - 没有疏散失败,但 G1GC 中仍然发生 Full GC

java - 收集特定时间范围内的 JVM GC 样本