进程内存消耗的大波动

时间:2019-09-20 14:20:02

标签: java jvm jit jvm-hotspot

我有使用OpenGL的应用程序(通过LibGdx/Lwjgl库)。我正在使用以下JRE:

java version "1.8.0_211"
Java(TM) SE Runtime Environment (build 1.8.0_211-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, mixed mode)

启动后,我的应用程序很快进入稳定状态-它显示一些图像,动画,纹理等。所有显示都循环工作,几秒钟后再次启动相同的渲染序列,然后再次启动,依此类推,等等所有的时间都是一样的。没有用户输入。

进入稳定状态并经过一些稳定状态周期(每个周期持续几秒钟)后,我的应用程序具有以下内存使用情况:

Process memory used: ~1.3 Gb
Heap size: ~527 Mb
Heap used: ~110-317 Mb

App使用DirectByteBuffer实例分配一些本机内存,并且它使用JNI/JNR与本机C ++代码进行通信,因此我的进程内存使用率比Heap内存使用率高得多。使用Parallel GC,分配速率为〜4 Mb / s,因此次要GC很少发生,主要GC可能永远不会发生,因为预热之后所有分配都应该是短暂的。

我注意到堆大小和堆使用量一直在减少,这与预期的一样。在稳定状态下运行约40分钟后,App的内存使用情况如下:

Heap size: ~330 Mb
Heap used: ~110-140 Mb

但是

Process memory used: ~2 Gb

起初,我以为我的本机内存泄漏是由于进程内存消耗增加了约700Mb。但是大约20分钟后,大约有:

Process memory used: ~1 Gb

因此,我认为App由于执行了某种Profile Guided OptimizationsJIT编译而具有更大的内存消耗,此后,App返回到稳定的内存消耗〜1Gb。然而,惊喜又过了20分钟:

Process memory used: ~1.5 Gb

现在我不知道发生了什么。进程内存消耗大幅度波动的原因是什么?

0 个答案:

没有答案