我有一个非常奇怪的问题。我正在开发一个基于 Eclipse Equinox 的 OSGi 应用程序;它是使用 OSGi 日志服务(Equinox 实现)开发的,现在我正在使用 Apache Felix OSGi 日志服务实现对其进行测试。
在 API/代码方面,一切正常:OSGi 日志服务是标准的,所以我可以毫无问题地从 Equinox 切换到 Felix。
但是,我观察到这种奇怪的行为:我将应用程序作为控制台程序启动,以查看控制台上的日志输出,并将其附加到 JVisualVM 以分析内存使用情况;JVisualVM 图显示了一个 80 MB 的已用堆。
13 小时后,平均堆大小达到 220 MB,所以我决定分析堆转储,并按下“堆转储”按钮:在此操作后,JVisualVM 图显示已用堆为 20(min)-35 (max)MBs (?!?!),并且这个值是恒定的。
“堆转储”操作可以释放近 200 mbs 吗?如果是,为什么?
我从未在 Equinox OSGi 日志服务实现中看到这种行为,所以我怀疑 Felix 日志涉及到这个问题......
谢谢