我注意到许多语言的这一点,包括
- C#
- 爪哇
- Python
- JS
以及由某些解释器(通常具有垃圾收集器)解释的许多其他语言。
当我检查系统(unix)上的内存使用情况时 - 任何系统(我在许多不同的服务器上都尝试过)。我可以看到分配的虚拟内存和常驻内存(实际被吃掉的真实物理内存)之间的巨大差异。
这不是像 c 或 c++ 这样的语言的情况。
例如,使用 30mb 常驻内存的 java 应用程序可以使用 2gb 的虚拟内存,这也适用于其他解释语言。当然这不会每次都发生(在所有情况下差异都不是很大),但在大多数情况下它相当大。
或示例(这实际上是真实数据)ac# 应用程序 MonoDevelop 使用 136MB 的常驻内存但 1661MB 的虚拟内存
健壮的 C++ 应用程序也有例外,例如 firefox 似乎也有同样的问题,据我所知,它也使用垃圾收集器
对于每个基于虚拟内存限制内存的系统来说,这都是一个问题(这实际上是一种正确的方法,因为操作系统应该保证分配给进程的虚拟内存量实际上可用于该进程)。
这是为什么?