Skip to content

Commit 57dda43

Browse files
committed
HV-1696 Avoid using computeIfAbsent every time in BeanMetaDataManagerImpl
It significantly reduces memory allocation as it avoids the creation of a lambda instance.
1 parent 115d72e commit 57dda43

File tree

1 file changed

+14
-2
lines changed

1 file changed

+14
-2
lines changed

engine/src/main/java/org/hibernate/validator/internal/metadata/BeanMetaDataManagerImpl.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -146,8 +146,20 @@ public BeanMetaDataManagerImpl(ConstraintCreationContext constraintCreationConte
146146
public <T> BeanMetaData<T> getBeanMetaData(Class<T> beanClass) {
147147
Contracts.assertNotNull( beanClass, MESSAGES.beanTypeCannotBeNull() );
148148

149-
BeanMetaData<T> beanMetaData = (BeanMetaData<T>) beanMetaDataCache.computeIfAbsent( beanClass,
150-
bc -> createBeanMetaData( bc ) );
149+
// First, let's do a simple lookup as it's the default case
150+
BeanMetaData<T> beanMetaData = (BeanMetaData<T>) beanMetaDataCache.get( beanClass );
151+
152+
if ( beanMetaData != null ) {
153+
return beanMetaData;
154+
}
155+
156+
beanMetaData = createBeanMetaData( beanClass );
157+
BeanMetaData<T> previousBeanMetaData = (BeanMetaData<T>) beanMetaDataCache.putIfAbsent( beanClass, beanMetaData );
158+
159+
// we return the previous value if not null
160+
if ( previousBeanMetaData != null ) {
161+
return previousBeanMetaData;
162+
}
151163

152164
return beanMetaData;
153165
}

0 commit comments

Comments
 (0)