Performance
Our coverage of StackWalker
would not be complete without a look at performance considerations.
StackWalker
is highly optimized and does not create huge memory structures that go unused. That is the reason why we have to use that Function
passed to the method walker()
as an argument. This is also the reason why a StackTrace
is not automatically converted to a StackTraceElement
when created. This only happens if we query the method name, the line number of the specific StackTraceElement
. It is important to understand that this conversion takes a significant amount of time and if it was used for some debug purpose in the code it should not be left there.
To make the StackWalker
even faster we can provide an estimate about the number of StackFrame
elements that we will work with in the stream. If we do not provide such an estimate, the current implementation in the JDK will use eight StackFrame
objects pre-allocated and when that is exhausted, the JDK will allocate more. The JDK will...