<div class="__aliyun_email_body_block"><div  style="line-height:1.7;font-family:Tahoma,Arial,STHeiti,SimSun;font-size:14.0px;color:#000000;"><div  style="clear:both;"><br ></div><div  style="clear:both;">Hi,</div><div  style="clear:both;"><br ></div><div  style="clear:both;">  I made some experiments on object allocation performance. And I found on aarch64 N1, if object has final field, the allocation rate is about 75% of normal allocation.</div><div  style="clear:both;">The cause is C2 will insert a release membar in <init> , which will be translated as "dmb.ish" in aarch64. For normal allocation, a membar storestore is inserted and</div><div  style="clear:both;">is emitted as "dmb.ishst", it make the difference. The test jmh is <span ><a  href="https://gist.github.com/kuaiwei/f71fba40df29991c93325a8600e34c13" target="_blank">https://gist.github.com/kuaiwei/f71fba40df29991c93325a8600e34c13</a></span></div><div  style="clear:both;"><br ></div><div  style="clear:both;"><span >java -jar target/benchmarks.jar -f 1 -wi 5 -w 3 -i 3 -r 3 testAlloc</span></div><div  style="clear:both;"><span >...</span></div><div  style="clear:both;"><span ><br ></span></div><div  style="clear:both;"><span ><span >Benchmark                       Mode  Cnt     Score    Error  Units<br ></span></span><div  style="clear:both;">AllocFinal.testAlloc           thrpt    3  1167.903 ± 44.973  ops/s<br ></div><div ><span >AllocFinal.testAllocWithFinal  thrpt    3   915.330 ± 52.596  ops/s</span></div></div><div  style="clear:both;"><br ></div><div  style="clear:both;"><br ></div><div  style="clear:both;">  I found only C2 will insert release membar and C1 just insert storestore for both final and normal allocation. In Doug Lea's cookbook <span ><a  href="https://gee.cs.oswego.edu/dl/jmm/cookbook.html" target="_blank">https://gee.cs.oswego.edu/dl/jmm/cookbook.html</a></span></div><div  style="clear:both;">Only storesotre is required. Alex has a great post on this topic <span ><a  href="https://shipilev.net/blog/2014/all-fields-are-final/" target="_blank">https://shipilev.net/blog/2014/all-fields-are-final/</a> . It referred a case why loadstore is needed. </span><span ><a  href="https://www.hboehm.info/c++mm/no_write_fences.html" target="_blank">https://www.hboehm.info/c++mm/no_write_fences.html</a></span></div><div  style="clear:both;">I checked this case and IMO it looks some legacy architecture may break data dependency and cause problem. As I know, alpha architecture is an example. I think it doesn't</div><div  style="clear:both;">break on modern architecture. Is there other case I missed?</div><div  style="clear:both;"><br ></div><div  style="clear:both;">  If storestore is enough in this situation, I will send a PR to loose the barrier. </div><div  style="clear:both;"><br ></div><div  style="clear:both;">Thanks,</div><div  style="clear:both;">Kuai Wei</div></div></div>