Updated ARM Spec (original) (raw)

Joe Darcy joe.darcy at oracle.com
Fri Aug 20 13:45:42 PDT 2010


Rémi Forax wrote:

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.MAXVALUE];_ _} 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::genoutofmemoryerror: if (next < 0) { // all preallocated errors have been used. // return default + javalangThrowable::clearstacktrace(defaulterr); return defaulterr; } else { And we should do the same for the field suppressed exceptions. Rémi

Thanks for the suggestion Rémi; I'm also checking with the HotSpot folks to see if any other kinds of exceptions need to be handled specially.

-Joe



More information about the coin-dev mailing list