java - 频繁的 Full GC 且堆为空

标签 java garbage-collection heap-memory

我有一个 GC 日志文件,显示堆为空时频繁的完整 GC(最初每 30 分钟一次,然后每分钟 20、10、5 次,最多几个事件。不过,在某些时候,我可以看到堆使用量突然增加(我想象在用户开始连接到我的应用程序时)并且完整 GC 事件开始发生的频率降低。 我想不出为什么会发生这种情况。

我使用的是 Oracle Vm 1.6,我的启动脚本是:

java -XX:+HeapDumpOnOutOfMemoryError \
     -Xmx7500m \
     -XX:HeapDumpPath=../logs \
     -verbose:gc \
     -XX:+PrintGCDetails \
     -XX:+PrintGCTimeStamps \
     -Xloggc:/app/diffusion/Logs/gc.log \
     -Dcom.sun.management.jmxremote \
     -Dcom.sun.management.jmxremote.ssl=false \
     -Dcom.sun.management.jmxremote.authenticate=false \
     -Dcom.sun.management.jmxremote.port=2000 \
     -cp ../lib/diffusion.jar:../etc:../data com.pushtechnology.diffusion.Diffusion $1

最佳答案

尝试禁用显式GC,看看是否有帮助:-XX:+DisableExplicitGC

然后,您可以收集一些线程转储,以确认当堆为空时应用程序中没有真正运行的任何内容。

关于java - 频繁的 Full GC 且堆为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15422352/

相关文章:

c - malloc 和 scanf

java - Akka持久化自定义java插件

c# - 托管代码是指 JIT 还是 GC?

c - 在堆中释放一个内存块

unit-testing - Spring Framework - 单元测试设计

c# - 我是否需要显式卸载动态加载的程序集?

rust - 我应该使用什么容器来存储堆分配结构的多个不可变引用?

java - Api 29 (Android Q) 外部应用程序目录中的 SQLiteOpenHelper

java - 无法创建请求的服务 [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] 无法加载类 [org.postgresql.Driver]

java - 程序类型已存在 : org. json.CDL