MM_Interface.emergencyGrowHeap(- (512 * (1 << 10)));
MM_Interface.emergencyGrowHeap(-headroom);
  private static final void checkForExhaustion(int why, boolean async)    throws LogicallyUninterruptiblePragma {    double usage = Plan.reservedMemory().toLong()/ ((double) Plan.totalMemory().toLong());        //    if (Plan.totalMemory() - Plan.reservedMemory() < 64<<10) {    if (usage > OUT_OF_MEMORY_THRESHOLD) {      if (why == INTERNAL_GC_TRIGGER) {        if (Options.verbose.getValue() >= 2) {          VM.sysWriteln("OutOfMemoryError: usage = ", usage);          VM.sysWriteln("          reserved (KB) = ",(long)(Plan.reservedMemory().toLong() / 1024));          VM.sysWriteln("          total    (KB) = ",(long)(Plan.totalMemory().toLong() / 1024));        }        if (VM.debugOOM || Options.verbose.getValue() >= 5)          VM.sysWriteln("triggerCollection(): About to try \"new OutOfMemoryError()\"");        MM_Interface.emergencyGrowHeap(512 * (1 << 10));  // 512K should be plenty to make an exn        OutOfMemoryError oome = new OutOfMemoryError();        MM_Interface.emergencyGrowHeap(- (512 * (1 << 10)));        if (VM.debugOOM || Options.verbose.getValue() >= 5)          VM.sysWriteln("triggerCollection(): Allocated the new OutOfMemoryError().");        throw oome;      }      /* clear all possible reference objects */      ReferenceProcessor.setClearSoftReferences(true);      if (!async)        triggerCollection(INTERNAL_GC_TRIGGER);    }  }