<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div style="font-family: "Calibri Light", "Helvetica Light", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
Hi Eirik, this looks like a standard set of classes that should be loaded for lambda expression generation at early bootstrap.</div>
<div style="font-family: "Calibri Light", "Helvetica Light", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
If this particular site does not trigger such loading, any lambda use in user code would still trigger all these.</div>
<div style="font-family: "Calibri Light", "Helvetica Light", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
I think the loop version is only better for bootstrap. Otherwise, in terms of hotspot compilation abilities, these two pieces of code suffer from the same profile pollution problem.</div>
<div style="font-family: "Calibri Light", "Helvetica Light", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
<br>
</div>
<div style="font-family: "Calibri Light", "Helvetica Light", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
But given that collections are used in early bootstrap in general, I think being bootstrap-proof might be a good idea.</div>
<div style="font-family: "Calibri Light", "Helvetica Light", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
<br>
</div>
<div id="appendonsend"></div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> core-libs-dev <core-libs-dev-retn@openjdk.org> on behalf of Eirik Bjørsnøs <eirbjo@gmail.com><br>
<b>Sent:</b> Saturday, February 21, 2026 4:45 AM<br>
<b>To:</b> core-libs-dev <core-libs-dev@openjdk.org><br>
<b>Subject:</b> Re: RFD: ArrayDeque bulk adds and lambda</font>
<div> </div>
</div>
<div>
<div dir="ltr">
<div dir="ltr">On Sat, Feb 21, 2026 at 11:08 AM Eirik Bjørsnøs <<a href="mailto:eirbjo@gmail.com">eirbjo@gmail.com</a>> wrote:</div>
<div dir="ltr"><br>
</div>
<div class="x_gmail_quote x_gmail_quote_container">
<blockquote class="x_gmail_quote" style="margin:0px 0px 0px 0.8ex; border-left:1px solid rgb(204,204,204); padding-left:1ex">
<div dir="ltr">
<div>Can this make ArrayDeque somewhat safer to use in early bootstrap code?</div>
</div>
</blockquote>
<div><br>
</div>
<div>Adding some context from testing:</div>
<div><br>
</div>
<div>When modifying the mentioned code to not avoid the lambda bulk operation, nothing crashes but the number of loaded classes during 'java -cp hello.jar' is increased from 576 to 663. Here's a full list of extra classes loaded:</div>
<div><br>
</div>
<div>88a89<br>
> java.lang.NoSuchMethodException<br>
148a150,170<br>
> java.lang.classfile.Annotation<br>
> java.lang.classfile.AnnotationElement<br>
> java.lang.classfile.Attribute<br>
> java.lang.classfile.AttributeMapper<br>
> java.lang.classfile.AttributeMapper$AttributeStability<br>
> java.lang.classfile.Attributes<br>
> java.lang.classfile.BootstrapMethodEntry<br>
> java.lang.classfile.ClassElement<br>
> java.lang.classfile.ClassFileElement<br>
> java.lang.classfile.FieldElement<br>
> java.lang.classfile.MethodElement<br>
> java.lang.classfile.TypeKind<br>
> java.lang.classfile.attribute.RuntimeVisibleAnnotationsAttribute<br>
> java.lang.classfile.constantpool.AnnotationConstantValueEntry<br>
> java.lang.classfile.constantpool.ClassEntry<br>
> java.lang.classfile.constantpool.ConstantPool<br>
> java.lang.classfile.constantpool.ConstantPoolBuilder<br>
> java.lang.classfile.constantpool.LoadableConstantEntry<br>
> java.lang.classfile.constantpool.PoolEntry<br>
> java.lang.classfile.constantpool.Utf8Entry<br>
> java.lang.constant.ClassDesc<br>
150a173,182<br>
> java.lang.constant.ConstantDescs<br>
> java.lang.constant.DirectMethodHandleDesc<br>
> java.lang.constant.DirectMethodHandleDesc$Kind<br>
> java.lang.constant.DynamicConstantDesc<br>
> java.lang.constant.DynamicConstantDesc$AnonymousDynamicConstantDesc<br>
> java.lang.constant.MethodHandleDesc<br>
> java.lang.constant.MethodHandleDesc$1<br>
> java.lang.constant.MethodTypeDesc<br>
> java.lang.invoke.AbstractValidatingLambdaMetafactory<br>
> java.lang.invoke.BootstrapMethodInvoker<br>
153a186,193<br>
> java.lang.invoke.DirectMethodHandle$Constructor<br>
> java.lang.invoke.DirectMethodHandle$Holder<br>
> java.lang.invoke.InfoFromMemberName<br>
> java.lang.invoke.InnerClassLambdaMetafactory<br>
> java.lang.invoke.InvokerBytecodeGenerator<br>
> java.lang.invoke.InvokerBytecodeGenerator$8<br>
> java.lang.invoke.Invokers<br>
> java.lang.invoke.Invokers$Holder<br>
154a195,201<br>
> java.lang.invoke.LambdaForm$BasicType<br>
> java.lang.invoke.LambdaForm$Holder<br>
> java.lang.invoke.LambdaForm$Kind<br>
> java.lang.invoke.LambdaForm$Name<br>
> java.lang.invoke.LambdaForm$NamedFunction<br>
> java.lang.invoke.LambdaMetafactory<br>
> java.lang.invoke.LambdaProxyClassArchive<br>
158a206,208<br>
> java.lang.invoke.MethodHandleImpl$1<br>
> java.lang.invoke.MethodHandleImpl$Intrinsic<br>
> java.lang.invoke.MethodHandleInfo<br>
163a214,215<br>
> java.lang.invoke.MethodType$1<br>
> java.lang.invoke.MethodTypeForm<br>
169a222,223<br>
> java.lang.invoke.VarHandle$AccessMode<br>
> java.lang.invoke.VarHandle$AccessType<br>
199a254<br>
> java.lang.reflect.Array<br>
270a326<br>
> java.util.ArrayDeque$$Lambda/0x800000001<br>
273d328<br>
< java.util.ArrayList$Itr<br>
359a415<br>
> java.util.function.Consumer<br>
393a450<br>
> jdk.internal.access.JavaLangInvokeAccess<br>
402a460,484<br>
> jdk.internal.classfile.impl.AbstractAttributeMapper<br>
> jdk.internal.classfile.impl.AbstractAttributeMapper$RuntimeVisibleAnnotationsMapper<br>
> jdk.internal.classfile.impl.AbstractElement<br>
> jdk.internal.classfile.impl.AbstractPoolEntry<br>
> jdk.internal.classfile.impl.AbstractPoolEntry$AbstractNamedEntry<br>
> jdk.internal.classfile.impl.AbstractPoolEntry$AbstractRefEntry<br>
> jdk.internal.classfile.impl.AbstractPoolEntry$ClassEntryImpl<br>
> jdk.internal.classfile.impl.AbstractPoolEntry$Utf8EntryImpl<br>
> jdk.internal.classfile.impl.AbstractPoolEntry$Utf8EntryImpl$State<br>
> jdk.internal.classfile.impl.AnnotationImpl<br>
> jdk.internal.classfile.impl.BootstrapMethodEntryImpl<br>
> jdk.internal.classfile.impl.EntryMap<br>
> jdk.internal.classfile.impl.SplitConstantPool<br>
> jdk.internal.classfile.impl.TemporaryConstantPool<br>
> jdk.internal.classfile.impl.UnboundAttribute<br>
> jdk.internal.classfile.impl.UnboundAttribute$UnboundRuntimeVisibleAnnotationsAttribute<br>
> jdk.internal.classfile.impl.Util<br>
> jdk.internal.classfile.impl.Util$Writable<br>
> jdk.internal.constant.ArrayClassDescImpl<br>
> jdk.internal.constant.ClassOrInterfaceDescImpl<br>
> jdk.internal.constant.ConstantUtils<br>
> jdk.internal.constant.DirectMethodHandleDescImpl<br>
> jdk.internal.constant.DirectMethodHandleDescImpl$1<br>
> jdk.internal.constant.MethodTypeDescImpl<br>
> jdk.internal.constant.PrimitiveClassDescImpl<br>
512a595<br>
> jdk.internal.util.WeakReferenceKey<br>
524a608<br>
> sun.invoke.util.ValueConversions<br>
525a610,612<br>
> sun.invoke.util.VerifyType<br>
> sun.invoke.util.Wrapper<br>
> sun.invoke.util.Wrapper$Format<br>
</div>
<div><br>
</div>
<div>Eirik. </div>
</div>
</div>
</div>
</body>
</html>