On Wed, 10 Feb 2021 07:34:59 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`
>
> Aleksey Shipilev has updated the pull request incrementally with one 
> additional commit since the last revision:
> 
>   Added a comment

Looks good. I find it simpler too.

You could run the tests with sun.reflect.inflationThreshold=0. Should increase 
the chance of encountering reflection delegator loaders a lot.

Cheers, Thomas

-------------

Marked as reviewed by stuefe (Reviewer).

PR: https://git.openjdk.java.net/jdk/pull/2485

Reply via email to