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

Reply via email to