Either your application has used up the memory available to it or you have a problem with heap fragmentation.
In the first case you have created enough objects to take up all of the memory and you still have reference to them so the garbage collector cannot clean them up.
In the second case, heap fragmentation, you are trying to create an object that is bigger than the largest contiguous chunk of memory in the heap. This is more rare but certainly happens in some cases. The normal heap will get compacted during gc runs but the large object heap will not.
There is a good article on MSDN about the large object heap.
Edit: I remembered another way to get out of memory. You can try and create an object that is larger than 2GB in size. That is the maximum object size in .NET even on 64-bit.