Updated ARM Spec
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.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
>
>
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