RFR [9] 8151140: Replace use of lambda/method ref in jdk.Version constructor

Paul Sandoz paul.sandoz at oracle.com
Thu Mar 3 10:54:19 UTC 2016


+1

Paul.

> On 3 Mar 2016, at 11:31, Chris Hegarty <chris.hegarty at oracle.com> wrote:
> 
> Since 8150163 [1], jdk.Version can now be used earlier in startup, but not
> always. It was noticed that the use of lambda / method ref in the constructor,
> in some cases, was the first usage of such, and incurred the initialization
> costs of the java.lang.invoke infrastructure ( which can take a significant
> amount of time on first access).
> 
> The solution is to simple avoid the usage, as has been done in other “core"
> areas, that may be used early in startup.
> 
> diff --git a/src/java.base/share/classes/jdk/Version.java b/src/java.base/share/classes/jdk/Version.java
> --- a/src/java.base/share/classes/jdk/Version.java
> +++ b/src/java.base/share/classes/jdk/Version.java
> @@ -28,10 +28,10 @@
> import java.math.BigInteger;
> import java.security.AccessController;
> import java.security.PrivilegedAction;
> +import java.util.ArrayList;
> import java.util.regex.Matcher;
> import java.util.regex.Pattern;
> import java.util.stream.Collectors;
> -import java.util.Arrays;
> import java.util.Collections;
> import java.util.List;
> import java.util.Optional;
> @@ -208,11 +208,10 @@
>                                                + s + "'");
> 
>         // $VNUM is a dot-separated list of integers of arbitrary length
> -        version
> -            = Collections.unmodifiableList(
> -                  Arrays.stream(m.group(VNUM_GROUP).split("\\."))
> -                  .map(Integer::parseInt)
> -                  .collect(Collectors.toList()));
> +        List<Integer> list = new ArrayList<>();
> +        for (String i : m.group(VNUM_GROUP).split("\\."))
> +            list.add(Integer.parseInt(i));
> +        version = Collections.unmodifiableList(list);
> 
>         pre = Optional.ofNullable(m.group(PRE_GROUP));
> 
> -Chris.
> 
> [1] https://bugs.openjdk.java.net/browse/JDK-8150976
> 
> 




More information about the core-libs-dev mailing list