+1 Paul.
> On 3 Mar 2016, at 11:31, Chris Hegarty <chris.hega...@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 > >