discuss about release barrier for final fields initialization

dean.long at oracle.com dean.long at oracle.com
Wed Jan 10 00:11:10 UTC 2024


We only have https://bugs.openjdk.org/browse/JDK-8300148 for that.

thanks,

dl

On 1/8/24 10:23 PM, Kuai Wei wrote:
>
> Hi,
>
>   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.
> 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
> is emitted as "dmb.ishst", it make the difference. The test jmh is 
> https://gist.github.com/kuaiwei/f71fba40df29991c93325a8600e34c13
>
> java -jar target/benchmarks.jar -f 1 -wi 5 -w 3 -i 3 -r 3 testAlloc
> ...
>
> Benchmark       Mode  Cnt     Score    Error  Units
> AllocFinal.testAlloc  thrpt    3  1167.903 ± 44.973  ops/s
> AllocFinal.testAllocWithFinal  thrpt    3 915.330 ± 52.596  ops/s
>
>
>   I found only C2 will insert release membar and C1 just insert 
> storestore for both final and normal allocation. In Doug Lea's 
> cookbook https://gee.cs.oswego.edu/dl/jmm/cookbook.html
> Only storesotre is required. Alex has a great post on this topic 
> https://shipilev.net/blog/2014/all-fields-are-final/ . It referred a 
> case why loadstore is needed. 
> https://www.hboehm.info/c++mm/no_write_fences.html
> 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
> break on modern architecture. Is there other case I missed?
>
>   If storestore is enough in this situation, I will send a PR to loose 
> the barrier.
>
> Thanks,
> Kuai Wei
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/hotspot-compiler-dev/attachments/20240109/bcdd9fc8/attachment.htm>


More information about the hotspot-compiler-dev mailing list