> This PR reduces the amount of code executed during libgraal initialization. > This not only improves VM startup overall but all fixes a number of JDK test > failures that are caused by Java code executing "too early". For example, > `java/util/Locale/CompatWarning.java` can fail if > `sun.util.locale.provider.LocaleProviderAdapter` is initialized before the > `CheckWarning` handler is registered. > > Instead of serializing `VM.savedProps` via > `VMSupport.serializeSavedPropertiesToByteArray`, the > `jdk.vm.ci.services.Services` class now directly reads > `Arguments::system_properties()` using `Unsafe`. Furthermore, the value of a > system property is lazily converted to a `String` from a C string pointer. > > ## 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 ...
Doug Simon has updated the pull request incrementally with one additional commit since the last revision: reduced complexity of SystemProperties based on it being unmodifiable ------------- Changes: - all: https://git.openjdk.org/jdk/pull/14291/files - new: https://git.openjdk.org/jdk/pull/14291/files/7a82c24e..6c346d35 Webrevs: - full: https://webrevs.openjdk.org/?repo=jdk&pr=14291&range=03 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=14291&range=02-03 Stats: 207 lines in 2 files changed: 33 ins; 160 del; 14 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