我有一个使用Scala开发的JVM桌面应用程序。该应用程序循环运行仿真。为了维持模拟状态,它使用许多不可变的结构并以功能性方式对其进行更新。它工作正常,但是我担心的是,一旦应用程序变得更加复杂,垃圾收集器的活动可能会导致性能问题。
我想密切注意正在收集垃圾的对象的数量,如果发现任何意外增加,请解决此问题。我希望我能够轻松获得一些简单的指标,例如每个模拟步骤中垃圾回收的内存总量。考虑到这一点,我为VisualVM安装了以下插件:
不幸的是,我似乎找不到所需的指标。 Visual GC向我显示了Eden和OldGen空间中保留的内存量,但没有显示有多少被丢弃。
一个名为“回收的内存”的示踪探针,描述为“上次GC运行期间回收的内存量”,听起来很有希望,但是我必须以某种方式误解了它的作用。即使没有报告GC运行,它仍然报告大约1.4 GB的内存回收:
是否有某种方法可以通过外部实用程序(最好是VisualVM)或以编程方式从应用程序中获取垃圾回收器最近回收的对象数或内存量?还是我可能会误解一些基本知识,而这些指标甚至是不可能的?