Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-6978918

Should clear stackTrace before throwing the preallocated default OutOfMemoryError objects

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Won't Fix
    • Icon: P3 P3
    • 7
    • 7
    • core-libs
    • generic
    • generic

      The Throwable and its subclasses are mutable. The stack trace and suppressed
      exceptions fields can be set programmatically. The VM should clear these fields
      when the preallocated exceptions are reused.

      From Remi Forax:

      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.

            darcy Joe Darcy
            mchung Mandy Chung (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: