Yet another perfect example of a poorly worded question.
b and
c are just plain wrong: you can't directly run GC, you can only beg for it to run by calling System.gc(); or Runtime.getRuntime().gc();
c is wrong because GC is not polite enough to notify a lost object when it will be GC-ted. However, the finalize() will be invoked before the object is GC-ted. Again, finalize() is called only once, and there's no guarantee of any kind that that first time the object will be destroyed.
e seems to be the only plausible option to go for. If OutOfMemoryError is to be thrown, the GC will have run by that time. But, the definition of "low-memory situations" is a bit vague.
[ November 04, 2003: Message edited by: Vad Fogel ]