注意:我知道Memory management in memory intensive application这个问题,但是这个问题似乎是关于频繁分配内存的应用程序,而我的问题是关于应用程序故意设计为消耗尽可能多的物理内存这是安全的。针对有意识内存密集型应用程序的内存管理
我有一个服务器应用程序,使用大量的内存来执行缓存和其他优化(想想SQL Server)。应用程序运行在专用计算机上,因此可以(也应该)消耗尽可能多的内存,以便加速并提高吞吐量和响应时间,而无需担心会影响系统上的其他应用程序。
问题是,如果内存使用率被低估,或者如果负载增加,可能会因为内存分配失败而导致严重故障 - 在这种情况下,最好的办法是释放内存以防止以牺牲性能为代价的失败。
一些假设:
- 应用在专用机器上运行
- 应用程序的内存需求超过计算机上的物理内存(也就是说,如果额外的内存用于应用它将始终能够使用该内存以某种方式提高响应时间或吞吐量)
- 内存的有效管理方式使内存碎片不成问题。
- 应用程序知道可以安全释放哪些内存,以及为了最小的性能影响首先释放哪些内存。
- 在Windows计算机上的应用程序运行
我的问题是 - 我应该怎么处理内存分配在这样的应用程序?尤其是:
- 如何预测内存分配是否会失败?
- 为了确保核心操作系统操作保持响应(并且不会以这种方式对应用程序性能产生不利影响),我应该留出一定的内存空间吗?我该如何找出多少内存?
的核心目标是防止故障如使用过多内存,而在同一时间使用了尽可能多的内存可能的结果。
我是C#开发人员,但我希望任何这样的应用程序的基本概念都是相同的,不管语言如何。
顺便说一句 - 因为虚拟与物理内存的复杂性,我一直有意使用术语“内存”的大小。出于同样的原因,我没有提到32位和64位。 – Justin 2010-01-22 13:31:06