Updated ARM Spec (original) (raw)

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

And we should do the same for the field suppressed exceptions.

Rémi



More information about the coin-dev mailing list