This code in the JavaThread destructor is asserting and clearly wrong.
assert(deferred->length() != 0, "empty array!");
jvmtiDeferredLocalVariableSet* dlv = deferred->at(1);
// individual jvmtiDeferredLocalVariableSet are CHeapObj's
} while (deferred->length() != 0);
the "1" parameter for at() and remove_at() should be zero.