Den*_*nis 6 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 和内存消耗分析,请查看以下内容: G1 垃圾收集器的高内存使用问题 + https://www.javacodegeeks.com/2017/11/minimize-java-memory-usage-right-garbage-collector.html
没有办法强制JVM释放内存,System.gc()
只是一个提示。由 GC 来管理内存(请注意,内存有多种类型,例如堆、元空间、堆外)。每个 GC 算法都有多个可以调整的配置参数,但都不会为您提供按需释放内存的选项。
JVM 在启动时保留内存,并向操作系统请求额外的内存,直到达到配置的限制。它以块增量的形式执行此操作,一次请求 MB 或更多内存,因为逐字节向操作系统请求内存的效率非常低。
归档时间: |
|
查看次数: |
9929 次 |
最近记录: |