From 5c705166da112395dcff70685a4d19ea6e9f426b Mon Sep 17 00:00:00 2001 From: Man Cao Date: Thu, 15 Jun 2023 20:13:36 +0000 Subject: [PATCH] 8309688: Data race on java.io.ClassCache$CacheRef.strongReferent Reviewed-by: rriggs, shade --- src/java.base/share/classes/java/io/ClassCache.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/java.base/share/classes/java/io/ClassCache.java b/src/java.base/share/classes/java/io/ClassCache.java index 48e7a36c05a..4b41cf4671b 100644 --- a/src/java.base/share/classes/java/io/ClassCache.java +++ b/src/java.base/share/classes/java/io/ClassCache.java @@ -39,6 +39,11 @@ abstract class ClassCache { private static class CacheRef extends SoftReference { private final Class type; + // This field is deliberately accessed without sychronization. ClassValue + // provides synchronization when CacheRef is published. However, when + // a thread reads this field, while another thread is clearing the field, it + // would formally constitute a data race. But that data race is benign, and + // fixing it could introduce noticeable performance penalty, see JDK-8309688. private T strongReferent; CacheRef(T referent, ReferenceQueue queue, Class type) {