[
https://issues.apache.org/jira/browse/JEXL-344?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Henri Biestro updated JEXL-344:
-------------------------------
Assignee: Henri Biestro
> Don't fill stack trace for JexlExpression#Return (to improve performance)
> -------------------------------------------------------------------------
>
> Key: JEXL-344
> URL: https://issues.apache.org/jira/browse/JEXL-344
> Project: Commons JEXL
> Issue Type: Improvement
> Affects Versions: 3.1
> Reporter: David Costanzo
> Assignee: Henri Biestro
> Priority: Minor
>
> In profiling my JEXL-enabled application, I observed that nearly 10% of the
> execution time is spend filling in the {{JexlExpression#Return}} class's
> stack. As far as I can tell, the Return object's stack is not used by JEXL
> and so does not need to be present.
> I read about an optimization technique where you override fillInStackTrace()
> to be a no-op when using exceptions for control flow. As I understand it,
> this practice was codified into Java 7 with the "writableStackTrace"
> parameter to Throwable's ctor that lets you disable filling in the stack
> trace.
> For Java 6 and below, this is as easy as adding this to the body of
> {{Return}}.
> {code:java}
> @Override
> public Throwable fillInStackTrace()
> {
> // Don't fill in the stack. It's not needed for return values.
> return this;
> }
> {code}
> In private testing, this has the expected effect: my application finishes in
> ~10% less time and all unit tests continue to pass.
>
> There's a discussion of this on stack overflow:
> [https://stackoverflow.com/questions/1836164/override-fillinstacktrace-for-control-flow-performance]
>
> There's a better discussion in the answer given to:
> [https://stackoverflow.com/questions/11434431/exception-without-stack-trace-in-java]
>
--
This message was sent by Atlassian Jira
(v8.3.4#803005)