Мой небольшой стресс-тест, который выделяет в цикле массивы произвольной длины (100..200MB каждый), показывает различное поведение на 64-битной машине Win7 и на 32-битной XP (в виртуальной машине).Обе системы сначала обычно выделяют столько массивов, сколько поместится в LOH.Затем LOH становится все больше и больше, пока доступное виртуальное адресное пространство не будет заполнено.Ожидаемое поведение до сих пор.Но затем, при последующих запросах, оба ведут себя по-разному:
В то время как на Win7 создается исключение OutOfMemoryException (OOM), на XP кажется, что куча увеличивается и даже переставляется на диск - по крайней мере, OOM не выбрасывается.(Не знаю, может ли это быть связано с XP, работающей в виртуальной коробке.)
Вопрос: Как решает среда выполнения (или ОС?), Для запросов на выделение управляемой памяти, если это слишкомбольшой для выделения, генерируется OOM или увеличивается куча больших объектов - в конце концов даже выгружается на диск?Если он поменяется местами, когда произойдет OOM, чем?
ИМО этот вопрос важен для всех производственных сред, потенциально имеющих дело с большими наборами данных.Каким-то образом кажется более «безопасным» знать, что система скорее резко замедлится в таких ситуациях (путем замены), чем просто выбрасывает OOM.По крайней мере, это должно быть как-то детерминировано, верно?
@ Редактировать: это 32-битное приложение, поэтому оно работает в 32-битном режиме на Win 7.