<div dir="ltr"><div>No difference in codegen.  I also wouldn't expect any here since the Array.newInstance call and the read of the array in get() are "disconnected" as far as JIT is concerned - once the constructor returns, any type info inferred in the constructor of ArrayList is gone.  This is different from Arrays.copyOfRange() where the array instantiation and read from it are performed in one CFG.<br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Oct 28, 2015 at 4:51 PM, John Rose <span dir="ltr"><<a href="mailto:john.r.rose@oracle.com" target="_blank">john.r.rose@oracle.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><span class="">On Oct 28, 2015, at 12:54 PM, Vitaly Davidovich <<a href="mailto:vitalyd@gmail.com" target="_blank">vitalyd@gmail.com</a>> wrote:<br><div><blockquote type="cite"><br><div><span style="font-family:Helvetica;font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;float:none;display:inline!important">what should my example ArrayList look like</span></div></blockquote></div><br></span><div>Try changing your ArrayList class constructor:</div><div><br></div><div>  -   ArrayList(final Class<T> klass, final int size) {<br><div>  -      _items = (T[]) Array.newInstance(klass, size);</div><div>  +   ArrayList(final Class<T[]> arrayKlass, final int size) {</div></div><div><div>  +      _items = (T[]) Array.newInstance(arrayKlass.getComponentType(), size);</div></div><div><br></div><div>That will make the source code shape more like Arrays.copyOfRange, and what the optimizer expects.</div><div><br></div><div>YMMV</div><span class="HOEnZb"><font color="#888888"><div><br></div><div>— John</div></font></span></div></blockquote></div><br></div>