On Fri, 25 Apr 2025 03:16:09 GMT, Chen Liang <li...@openjdk.org> wrote:

>> In the Throwable::printStackTrace method, StringBuilder is created multiple 
>> times to build String. By sharing StringBuilder to build String, object 
>> allocation and copying are reduced.
>> 
>> In the scenario without suppressed and ourCause, unused IdentityHashMap is 
>> not created.
>> 
>> Through these optimizations, the performance of `new 
>> Exception().printStackTrace()` can be improved by about 10%.
>
> src/java.base/share/classes/java/lang/Throwable.java line 749:
> 
>> 747:             // Print suppressed exceptions, if any
>> 748:             for (Throwable se : getSuppressed())
>> 749:                 se.printEnclosedStackTrace(s, trace, SUPPRESSED_CAPTION,
> 
> Shouldn't SUPPRESSED_CAPTION be added a prefix?
> 
> I think we should revert the `prefixCaption` argument change; you should add 
> a line `String prefixCaption = prefix.concat(caption);` instead.

The reason for using prefixCaption is that javac can do constant folding when 
it is placed at the call site of the printStackTrace method.

> src/java.base/share/classes/java/lang/Throwable.java line 785:
> 
>> 783:             StackTraceElement[] trace,
>> 784:             int traceEnd,
>> 785:             int framesInCommon) {
> 
> You just need to pass `framesInCommon`, can calculate `int limit = 
> trace.length - framesInCommon;` and then for the loop below, `for (int i = 0; 
> i < limit; i++)` instead of using `traceEnd`

According to your suggestion, I removed the passing of framesInCommon, which 
can be calculated by `trace.length - 1 - traceEnd`

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/24864#discussion_r2059513887
PR Review Comment: https://git.openjdk.org/jdk/pull/24864#discussion_r2059515401

Reply via email to