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. This is the reason why we have to use that function passed to the walker() method as an argument. This is also the reason why StackTrace is not automatically converted to 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 debugging purpose in the code, it should not be left there.

To make StackWalker even faster, we can provide an estimate of the number of StackFrame elements that we will work within the stream. If we do not provide such an estimate, the current implementation in the JDK will use eight StackFrame objects preallocated and when that is exhausted, the JDK will allocate more. The JDK will allocate the number of elements based on our estimate unless we estimate a value larger than 256. In that case, the JDK will use 256.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset