繁体   English   中英

为什么我的堆会稳定增加,而全GC永远不会发生?

[英]why would my heap increase steadily and full GC never happens?

从GC日志中可以看到,堆使用的内存正在稳步增加,而完整的GC从来没有发生过,就像每天说一次都没有。 该应用程序尚未崩溃。 我应该找什么? 任何指针将非常有帮助。 我在Linux机器上运行Java 7。

Java进程内存包括JVM内存空间(堆+其他几个区域)和非JVM内存(如果您在JVM中使用某些本机库)。

通常,堆从不逃脱-释放的内存可被JVM重用,但不会释放给OS(取决于GC算法)。

JVM有两个选项来控制堆大小-Xms-Xmx来设置堆的初始大小和最大可能值( 实际上多于2个选项 )。

进程内存占用量的增长可能或可能不表示内存泄漏。

您需要在JVM中启用GC日志记录或使用某些JVM工具(例如JVisualVM)来验证您的活动对象数量是否在增长。

Java中的内存泄漏通常表现为“ Full GC”事件序列,并且间隔时间越来越短。

您不应期望JVM垃圾收集器将内存释放回OS。 某些算法无法做到。 有些人(例如G1)可以,但是他们可能出于过度的理由不立即这样做。

为什么呢 因为某处内存泄漏或物体膨胀。 我建议您运行MAT: http : //eclipse.org/mat

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM