我有一个在带有PAE的Windows 2003 x86上运行的应用程序。操作系统有8 GB RAM。 在应用程序运行期间,分配了一些内存,在主机进程增长到大约1GB并且总系统内存增长超过4GB之后,我得到了一个OOM异常。
那时大约有4GB RAM可用,单个进程大约有1GB到2GB的限制。
所以问题是:如果我有足够的可用内存,那么这个异常的来源会在哪里?
答案 0 :(得分:0)
请记住回答“我的程序使用了多少内存?”的问题。不是那么简单,答案取决于你测量的计数器。
我会从使用Process Monitor工具开始检查您的应用程序并观察:
另请参阅that question以查找有关不同内存使用率指标的更多详细信息。
由于我也是WinDbg的忠实粉丝,我会在发生OOM异常时对该进程进行完整的内存转储并详细分析。
答案 1 :(得分:0)
重要的不是系统可用的内存量,而是重要的是进程可用的内存量。由于您的进程是32位进程,因此硬限制为4GB。
所以你没有4GB可用内存,系统可以。您已经使用了4GB的分配而内存不足。
前进的唯一方法是转向64位进程。显然,这需要64位系统。