Updated ARM Spec
Rémi Forax
forax at univ-mlv.fr
Fri Aug 13 05:41:31 PDT 2010
Le 13/08/2010 05:28, Neal Gafter a écrit :
> When a stack overflow exception suppresses another exception, I assume
> it's suppressed exception list will be set. But since there is only
> one such exception allocated by the VM, this will overwrite any data
> previously stored there. Will the VM be modified to comply with this
> specification by allocating a new stack-overflow exception each time?
> Same question for out-of-memory error.
>
This problem already exists with jdk6.
This code change the stack trace of permanently allocated OutOfMerroryError.
public static void main(String[] args) {
Error last = null;
for(int i=0; i<100; i++) {
try {
Object o = new int[Integer.MAX_VALUE];
} catch (Error e) {
StackTraceElement[] stackTrace = e.getStackTrace();
if (stackTrace != null && stackTrace.length>0 &&
stackTrace[0].getLineNumber() == -3) {
e.printStackTrace();
return;
}
if (last == e) {
StackTraceElement element = new StackTraceElement("Foo",
"foo", null, -3);
e.setStackTrace(new StackTraceElement[]{element});
}
last = e;
}
}
}
To avoid that the VM has to clear the stacktrace when using the default
error:
in universe.cpp, in Universe::gen_out_of_memory_error:
if (next < 0) {
// all preallocated errors have been used.
// return default
+ java_lang_Throwable::clear_stacktrace(default_err);
return default_err;
} else {
And we should do the same for the field suppressed exceptions.
Rémi
More information about the coin-dev
mailing list