RFR: 8160000: Runtime.version() cause startup regressions in 9+119
Paul Sandoz
paul.sandoz at oracle.com
Mon Jun 27 08:07:12 UTC 2016
> On 26 Jun 2016, at 21:55, Claes Redestad <claes.redestad at oracle.com> wrote:
>
> Hi,
>
> 9+119 changed java.util.regex to initialize java.lang.invoke early, causing a number of easily reproducible startup regressions.
>
> This patch uses the fact that we already maintain the version string constituents during build time to simplify creation of the java.lang.Runtime.version().
>
> Webrev: http://cr.openjdk.java.net/~redestad/8160000/webrev.3/
> Bug: https://bugs.openjdk.java.net/browse/JDK-8160000
>
> Since getting Runtime.version() now does not have to touch java.util.regex classes we end up slightly ahead of previous builds for applications which does not use regular expressions.
>
> Thanks!
>
Looks good.
- Perhaps it’s worth pre-sizing the array list exactly by counting the ‘.’ before processing? or is 4 always pre-sized exactly?
- add an assert to check Version produced by version() is the same as that produced the previous way parsing the sys prop
-
957 if (!VersionProps.VERSION_PRE.isEmpty()) {
958 pre = Optional.of(VersionProps.VERSION_PRE);
959 } else {
960 pre = Optional.empty();
961 }
Encapsulate that and the other two into a separate method e.g. optionalOfEmpty then do:
version = new Version(…
optionalOfEmpty(VersionProps.VERSION_PRE),
…
);
Paul.
More information about the core-libs-dev
mailing list