我在服务器上运行java代码。一开始,我检查了空闲内存,发现超过20GB的内存是免费的。然后我运行了我的代码。它首先以大约9GB的RAM开始,但后来减少到大约2.7GB。
我再次检查了可用内存,它仍然是20GB左右。但我不明白为什么服务器决定减少我的进程的专用内存。虽然还有一些其他用户正在为他们的进程使用大约20GB的RAM,但我知道用户可以访问的内存量没有限制。
任何人都可以解释为什么内存会减少吗?
如果您需要更多信息,我会说我在谈论物理内存(RES)。专用于我的进程的虚拟内存总是32.8GB。
同时,我的代码运行需要很长时间。它已运行超过10个小时。流程的持续时间是否有效? (我自己的答案是否定的,因为每当我使用top
命令检查内存专用时,我看到其他用户正在使用20GB的RAM并且它永远不会改变!
答案 0 :(得分:0)
我假设您正在谈论Unix / Linux,因为您使用的是top
。
最可能的原因是您的应用程序已进入执行模式,其中主动使用的对象的工作集都在相对较少的内存页中。如果您的应用程序不读取或写入其他页面,则虚拟内存系统将逐渐刷新到磁盘(如果它们是脏的),然后将它们添加到空闲池中。据推测,这些页面随后被其他进程使用。