【发布时间】:2013-05-28 13:53:37
【问题描述】:
我在许多语言中都注意到了这一点,包括
- C#
- Java
- Python
- JS
以及由某些解释器(通常具有垃圾收集器)解释的许多其他语言。
当我检查系统(unix)上的内存使用情况时 - 任何系统(我在许多不同的服务器上尝试过)。我可以看到分配的虚拟内存和常驻内存(实际被吃掉的真实物理内存)之间的巨大差异。
这不是 c 或 c++ 等语言的情况。
例如,使用 30mb 常驻内存的 java 应用程序可以使用 2gb 的虚拟内存,这也适用于其他解释语言。当然,这种情况并非每次都会发生(并非在所有情况下差异都很大),但在大多数情况下会相当大。
或样本(这实际上是真实数据) 使用 136MB 常驻内存但 1661MB 虚拟内存的 c# 应用程序 MonoDevelop
强大的 c++ 应用程序也有例外,例如 firefox 似乎也有同样的问题,据我所知,它也使用垃圾收集器
这对于每个基于虚拟内存限制内存的系统来说都是一个问题(这实际上是一种正确的方法,因为操作系统应该保证分配给进程的虚拟内存量实际上可用于该进程) .
这是为什么呢?
【问题讨论】:
-
除其他外,这取决于拉入了多少库代码。
标签: memory