Integrated: 8261449: Micro-optimize JVM_LatestUserDefinedLoader
Aleksey Shipilev
shade at openjdk.java.net
Thu Feb 11 08:56:40 UTC 2021
On Tue, 9 Feb 2021 15:40:03 GMT, Aleksey Shipilev <shade at 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 <shade at 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
More information about the core-libs-dev
mailing list