This PR improves the startup time for libgraal by speeding up how 
`VM.savedProps` is copied into libgraal. This data structure is now serialized 
to a native buffer directly from C++ and the native buffer is then directly 
decoded by libgraal.

## Times

The basic benchmarking below shows that this change brings the time for a nop 
Java app with eager libgraal initialization (2) down to almost the same time as 
lazy libgraal initialization (1). The latter typically means no libgraal 
initialization happens as a top tier JIT compilation is never scheduled in such 
a short running app.


public class Nop {
    public static void main(String[] args) {}
}


(1) Baseline (no options):

> for i in (seq 10); java Nop; end
        0.05 real         0.04 user         0.01 sys
        0.04 real         0.03 user         0.01 sys
        0.04 real         0.03 user         0.01 sys
        0.04 real         0.03 user         0.01 sys
        0.03 real         0.03 user         0.00 sys
        0.04 real         0.03 user         0.01 sys
        0.04 real         0.03 user         0.00 sys
        0.03 real         0.03 user         0.00 sys
        0.04 real         0.03 user         0.01 sys
        0.03 real         0.03 user         0.00 sys


(2) Eagerly initialize libgraal (with PR):

> for i in (seq 10); /usr/bin/time java -XX:+EagerJVMCI Nop; end
        0.06 real         0.04 user         0.01 sys
        0.05 real         0.03 user         0.01 sys
        0.05 real         0.03 user         0.01 sys
        0.05 real         0.03 user         0.01 sys
        0.05 real         0.03 user         0.01 sys
        0.05 real         0.03 user         0.01 sys
        0.05 real         0.03 user         0.01 sys
        0.05 real         0.03 user         0.01 sys
        0.05 real         0.03 user         0.01 sys
        0.05 real         0.03 user         0.01 sys


(3) Eagerly initialize libgraal (without PR):

> for i in (seq 10); /usr/bin/time java -XX:+EagerJVMCI Nop; end
        0.11 real         0.08 user         0.02 sys
        0.08 real         0.06 user         0.01 sys
        0.08 real         0.07 user         0.01 sys
        0.10 real         0.07 user         0.01 sys
        0.08 real         0.06 user         0.01 sys
        0.10 real         0.07 user         0.01 sys
        0.08 real         0.07 user         0.01 sys
        0.08 real         0.07 user         0.01 sys
        0.08 real         0.06 user         0.01 sys
        0.08 real         0.06 user         0.01 sys

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

Commit messages:
 - more efficient copying of system properties into libjvmci

Changes: https://git.openjdk.org/jdk/pull/14291/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=14291&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8309390
  Stats: 242 lines in 8 files changed: 172 ins; 30 del; 40 mod
  Patch: https://git.openjdk.org/jdk/pull/14291.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/14291/head:pull/14291

PR: https://git.openjdk.org/jdk/pull/14291

Reply via email to