https://bz.apache.org/bugzilla/show_bug.cgi?id=67080

            Bug ID: 67080
           Summary: ImplicitObjectELResolverImpl.getValue() is slow
           Product: Tomcat 9
           Version: 9.0.x
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: P2
         Component: Catalina
          Assignee: dev@tomcat.apache.org
          Reporter: jeng...@amazon.com
  Target Milestone: -----

A high-volume, latency sensitive application reports that
`ImplicitObjectELResolverImpl.getValue()` uses approximately 0.2% of cpu, of
which most (0.18%) comes from the call to `Arrays.binarySearch` for an array of
strings.  This problem was previously noted on
https://bz.apache.org/bugzilla/show_bug.cgi?id=53895 but the solution was
rejected for various reasons.

I instead propose replacing the binary search with a switch statement on the
string values.  This requires Java 7 and was not an option when the previous
issue was closed.

The attached speed test shows that the `switch` statement is approximately 66%
faster.  I don't think it matters but I ordered the case statements in a rough
approximation of their frequency in our application.


The attached speed test returns results such as the following:

Done with old in 1522
Done with old in 1636
Done with old in 1606
Done with old in 1641
Done with old in 1583
Done with old in 1587
Done with old in 1629
Done with old in 1627
Done with old in 1607
Done with old in 1569
Done with new in 474
Done with new in 453
Done with new in 450
Done with new in 452
Done with new in 449
Done with new in 450
Done with new in 454
Done with new in 452
Done with new in 459
Done with new in 447

-- 
You are receiving this mail because:
You are the assignee for the bug.
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to