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