On Tue, 9 Feb 2021 15:40:03 GMT, Aleksey Shipilev <sh...@openjdk.org> wrote:
> `JVM_LatestUserDefinedLoader` is called normally from > `ObjectInputStream.resolveClass` -> `VM.latestUserDefinedLoader0`. And it > takes a measurable time to walk the stack. There is JDK-8173368 that wants to > replace it with `StackWalker`, but we can tune up the > `JVM_LatestUserDefinedLoader` itself without changing the semantics of it > (thus providing the backportability, including the releases that do not have > `StackWalker`) and improving performance (thus providing a more aggressive > baseline for `StackWalker` rewrite). > > The key is to recognize that out of two checks: 1) checking for two special > subclasses; 2) checking for user classloader -- the first one usually passes, > and second one fails much more frequently. First check also requires > traversing the superclasses upwards looking for match. Reversing the order of > the checks, plus inlining the helper method improves performance without > changing the semantics. > > Out of curiosity, my previous patch dropped the first check completely, > replacing it by asserts, and we definitely run into situation where that > check is needed on some tests. > > On my machine, `VM.latestUserDefinedLoader` invocation time drops from 115 to > 100 ns/op. Single-threaded SPECjvm2008:serial improves about 3% with this > patch. > > Additional testing: > - [x] Ad-hoc benchmarks > - [x] Linux x86_64 fastdebug, `tier1`, `tier2`, `tier3` > > --------- > ### Progress > - [x] Change must not contain extraneous whitespace > - [x] Commit message must refer to an issue > - [ ] Change must be properly reviewed > > > > ### Download > `$ git fetch https://git.openjdk.java.net/jdk pull/2485/head:pull/2485` > `$ git checkout pull/2485` This pull request has now been integrated. Changeset: 49cf13d2 Author: Aleksey Shipilev <sh...@openjdk.org> URL: https://git.openjdk.java.net/jdk/commit/49cf13d2 Stats: 20 lines in 3 files changed: 4 ins; 13 del; 3 mod 8261449: Micro-optimize JVM_LatestUserDefinedLoader Reviewed-by: dholmes, stuefe, alanb ------------- PR: https://git.openjdk.java.net/jdk/pull/2485