现代应用程序消耗大量内存是否合理?

时间:2009-02-28 05:11:23

标签: memory-management

Microsoft Outlook和Eclipse IDE等应用程序消耗RAM,高达200MB。现代应用程序是否可以消耗那么多内存,因为几年前我们只有256MB内存?另外,为什么会发生这种情况?我们认为资源是理所当然的吗?

8 个答案:

答案 0 :(得分:9)

当大多数人的PCS上有1或2千兆字节的RAM时,它是否可以接受?

想想这一点 - 尽管你的200mb很小并且没有什么可担心的,因为2Gb限制,其他人也都有需要大量RAM的应用程序。将它们加在一起就会发现2Gb我很快就会用光了。最终结果 - 您的应用显得缓慢,资源匮乏,需要很长时间才能启动。

我认为人们会开始反对资源匮乏的应用程序,除非他们获得“ram的价值”。你可以看到这开始在服务器上发生,因为虚拟化系统越来越受欢迎 - 人们抱怨资源需求和相应的服务器成本。

作为一个真实世界的例子,我曾经在我的旧512Mb 1.7GHz机器上用VC6编码,一切都很好 - 我可以打开4或5个副本以及Outlook,Word和Web浏览器,我的机器响应

今天我有一台配备3Gb内存的双处理器2.8Ghz服务器盒,但我无法实际运行2​​个以上的Visual Studio 2008副本,它们都需要很长时间才能启动(因为所有RAM仍然需要复制到并设置,以及我们现在拥有的所有其他启动成本),甚至Word需要很长时间才能加载文档。

因此,如果你可以减少内存使用量。不要以为你可以随意使用任何膨胀的框架/图书馆/练习而不受惩罚。

答案 1 :(得分:4)

答案 2 :(得分:3)

您需要考虑几件事情。

1 /你现在有256M 吗?我不这么认为 - 我最小的内存机器是2G,所以200M应用程序不是什么大问题。

2a /你说的200M可能不是“真正的”记忆。它可能只是地址空间,在这种情况下,它可能不会同时存在于物理内存中。当你选择做一些深奥的东西时,有些位可能只会被拉入物理内存。

2b /它也可以在其他进程(例如DLL)之间共享。这意味着它只能作为一个副本保存在物理内存中,而是存在于许多进程的地址空间中。这样,使用量就会在这些流程上摊销。 2a和2b都取决于你的200M实际来自哪里(我不知道,运行Linux,如果没有你告诉我,我很难发现: - )。

3 /即使它是物理内存,现代操作系统也不像旧的DOS或Windows 3.1 - 它们具有虚拟内存,其中一些应用程序可以被分页(数据)或完全丢弃(代码,因为它总是可以从可执行文件重新加载)。虚拟内存使您能够使用比实际物理内存更多的内存。

答案 3 :(得分:3)

许多现代应用程序将利用更多内存来缓存更多内存。有些像firefox和SQL服务器有明确的设置,他们将使用多少内存。在我看来,不使用可用内存是愚蠢的 - 如果你的应用程序都在10MB左右,而你的90%的物理内存未被使用,那么拥有2GB内存的重点是什么。当然,如果您的应用程序确实使用了这样的缓存,那么最好在页面文件抖动开始时释放该内存,或者允许用户手动限制缓存大小。

通过针对SQL Server运行体面大小的查询,您可以看到这一点的优势。第一次运行查询时,可能需要10秒钟。但是当你再次运行那个确切的查询时,它只需不到一秒钟 - 为什么?查询计划仅在第一次编译时被缓存以供稍后使用。需要读取的数据库页面仅在第一次从磁盘加载 - 第二次,它们仍然缓存在RAM中。如果操作正确,则用于缓存的内存越多(直到您遇到分页),您重新访问数据的速度就越快。你会在大型文档中看到相同的东西(例如在Word和Acrobat中) - 当你滚动到文档的新区域时,事情很慢,但是一旦它被渲染和缓存,事情就会加速。如果您没有足够的内存,那么该缓存开始被覆盖,并且文档的旧部分会再次变慢。

答案 4 :(得分:2)

如果您可以充分利用RAM,那么使用它就是您的责任

答案 5 :(得分:2)

是的,这是完全正常的。还有一些重大变化,因为256MB是正常的...并且不要忘记在此之前640Kb应该对每个人都足够了!

现在大多数软件解决方案都是用垃圾收集器构建的:C#,Java,Ruby,Python ......每个人都喜欢它们,因为肯定开发可以更快,但是有一个小故障。

同一程序可以通过手动或自动内存释放来释放内存。然而,在第二种情况下,内存消耗可能会增长。为什么?在第一种情况下,内存被释放并在某些东西变得无用(垃圾)后立即保持清洁。然而,自动检测它需要时间和计算能力,因此大多数收集器(参考计数除外)等待垃圾累积以便为探索成本付出代价。您等待的垃圾越多,一次打击的成本就越多,但需要更多的内存来积累垃圾。如果你试图不断强迫收藏家,你的程序会花更多的时间来探索记忆而不是处理你的问题。

你可以完全确定,只要程序员获得更多资源,他们就会使用更重的工具来牺牲它们,以换取更多的自由,抽象和更快的开发。

答案 6 :(得分:1)

几年前,256 MB是PC的常态,然后Outlook消耗了大约30 - 35 MB左右的内存,大约占可用内存的10%,现在PC已经有2 GB或更多的标准,而且outlook消耗200 MB内存,大约10%。

第一个结论:随着更多内存可用,应用程序会使用更多内存。

第二个结论:无论你选择什么时间框架,都有真正的内存占用的应用程序(如Outlook)和非常有效的内存应用程序。

第三个结论:应用程序的内存消耗不能随着时间的推移而下降,否则即使在今天640K就足够了。

答案 7 :(得分:0)

完全取决于应用程序。