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

Memory management 现代应用程序消耗大量内存是否合理?,memory-management,Memory Management,像MicrosoftOutlook和EclipseIDE这样的应用程序使用的RAM高达200MB。考虑到几年前我们只有256MB的RAM,现代应用程序可以消耗这么多内存吗?还有,为什么会发生这种情况?我们是否认为这些资源是理所当然的? 此外: 有几件事你需要考虑一下 1/您现在有256M吗?我不这么认为-我最小的内存机器是2G,所以一个200米的应用程序不是什么大问题 2a/你所说的200米可能不是“真正的”记忆。它可能只是地址空间,在这种情况下,它可能不会一次全部位于物理内存中。当你选择做一些

像MicrosoftOutlook和EclipseIDE这样的应用程序使用的RAM高达200MB。考虑到几年前我们只有256MB的RAM,现代应用程序可以消耗这么多内存吗?还有,为什么会发生这种情况?我们是否认为这些资源是理所当然的?

此外:


有几件事你需要考虑一下

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

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

2b/它也可以在其他进程(如DLL)之间共享。这意味着它只能作为一个副本保存在物理内存中,但可以存在于许多进程的地址空间中。这样,使用量就可以在许多过程中摊销。2a和2b都取决于你的2亿数字的实际来源(我不知道,而且,运行Linux,如果你不告诉我,我不可能知道:-)


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

几年前,256MB是PC的标准内存,然后Outlook消耗了大约30-35MB的内存,这大约是可用内存的10%,现在PC的标准内存是2GB或更大,Outlook消耗了200MB的内存,也就是10%左右

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

第二个结论:无论您选择什么时间段,都有一些应用程序是真正的内存消耗(如Outlook)和非常高效的内存应用程序


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

当大多数人的电脑上有1或2GB的RAM时,这是否可以接受

想想看——虽然你的200mb很小,而且没有什么好担心的,但是其他人都有占用大量内存的应用程序。把它们加在一起,你会发现我的2Gb很快就用光了。最终结果-您的应用程序运行缓慢,资源匮乏,启动时间较长

我认为人们将开始反抗资源匮乏的应用程序,除非他们获得“ram的价值”。您可以看到,随着虚拟化系统的普及,这种情况开始在服务器上发生——人们抱怨资源需求和相应的服务器成本

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

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


因此,如果你能减少内存使用,你应该。不要认为你可以随便使用任何你想要的臃肿的框架/库/实践而不受惩罚

许多现代应用程序将利用更多内存来缓存更多内存。像firefox和SQL server这样的一些应用程序有明确的内存使用量设置。在我看来,不使用可用内存是愚蠢的——如果你的应用都是10MB,而90%的物理内存没有使用,那么拥有2GB内存又有什么意义呢。当然,如果您的应用程序确实使用了这样的缓存,那么最好在页面文件抖动开始时释放内存,或者允许用户手动限制缓存大小


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

如果您能够充分利用RAM,则使用它是您的责任。

这完全取决于应用程序。

是的,这是完全正常的。另外,由于256MB是正常的,所以发生了很大的变化。。。别忘了,在那之前,640Kb应该对每个人都足够了

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

通过手动或自动内存释放,同一程序可以无内存泄漏。然而,在第二种情况下,内存消耗可能会增加。为什么?在第一种情况下,内存被释放,并在某些东西变得无用(垃圾)后立即保持干净。然而,自动检测需要时间和计算能力,因此大多数收集器(引用计数除外)都会等待垃圾按t的顺序累积