Hi,

Please review my fix for 8169389.

Bug:
https://bugs.openjdk.java.net/browse/JDK-8169389
Webrev:
http://cr.openjdk.java.net/~bchristi/8169389/webrev.03/

The addition of classloader names (JDK-6749237) updated the format of StackTraceElement.toString(). A field was added to store the "[[class-loader-name]/[module-name[@module-version]]]" portion of the returned String.

Instead of storing a String, we can cut down on footprint by using a bitfield to indicate which fields to include in the toString() output.

Looking at the heap usage of a simple test case indicates ~25% reduction in space used by Throwable's StackTraceElement[]. (Of course this could vary quite a bit, depending on the specifics of the call stack.)

The additional byte field does not increase the instance size of a StackTraceElement; it is within space already lost for alignment (per linux_x64 w/ CompressedOops).

While working on this, it was noticed that with the new toString() format, there are circumstances in which two StackTraceElements can be equals(), but return different values from toString(). I thought it was worth updating the JavaDoc to call out this unusual possibility.

Likewise, there can be information reflected in the StackTraceElement getter methods that is not reflected in the toString() value. I updated the test code to check for this.

Thanks,
-Brent

Reply via email to