Либо ваше приложение использовало доступную ему память, либо у вас возникла проблема с фрагментацией кучи.
В первом случае вы создали достаточно объектов, чтобы занять всю память, и у вас все еще есть ссылки на них, поэтому сборщик мусора не может их очистить.
Во втором случае, фрагментации кучи, вы пытаетесь создать объект, который больше, чем самый большой непрерывный кусок памяти в куче. Это более редко, но, безусловно, случается в некоторых случаях. Обычная куча будет сжата во время выполнения gc, но куча больших объектов - нет.
На MSDN есть хорошая статья о куче больших объектов.
Редактировать: Я вспомнил другой способ избавиться от памяти. Вы можете попробовать создать объект размером более 2 ГБ. Это максимальный размер объекта в .NET даже на 64-битной.