似乎每次有人抱怨使用了多少内存时,所有响应都声称它只是缓存,它没有害处,它会在需要时重新分配等等,即使它清楚地表明根据内存监控工具,它不是一些磁盘缓存,而是“实际”使用情况。
我可以看到磁盘缓存绝对不是问题,它对应用程序是透明的,并且可以简单地停止使用,但这是否也适用于非磁盘缓存,就像许多人声称的那样?进程的标准内存和用于缓存的内存之间是否存在某种分离,内核可以随时删除缓存?
看起来应用程序必须根据其目的使用不同的方式来分配内存,例如用于缓存的 malloc 和标准的 malloc,但情况似乎并非如此,那么唯一的方法就是拥有实际的“ “无害”的缓存是不断手动监视可用内存量,并在可用内存减少时删除一些缓存,这似乎是一项相当大的工作量,我非常怀疑许多应用程序会采取如此的措施来确保其缓存是“无害”。
答案1
不,内核不管理进程的缓存。分配给进程并使用的任何内存都被内核视为“珍贵”:只有当进程再次需要它们时可以检索其内容时,它才会从物理内存中删除。
Linux下,进程能分配内存并告诉内核它可以根据需要回收它,方法是调用madvise
有MADV_FREE
建议。但该过程必须充分了解这些内存区域会发生什么。