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