[
https://issues.apache.org/jira/browse/SLING-12483?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Joerg Hoh resolved SLING-12483.
-------------------------------
Resolution: Fixed
> Improve performance of constructor-based instantiation on Java11
> ----------------------------------------------------------------
>
> Key: SLING-12483
> URL: https://issues.apache.org/jira/browse/SLING-12483
> Project: Sling
> Issue Type: Improvement
> Components: Sling Models
> Affects Versions: Models Implementation 1.7.4
> Reporter: Joerg Hoh
> Assignee: Joerg Hoh
> Priority: Major
> Fix For: Models Implementation 1.7.6
>
>
> Context:
> * Runtime with Java 11
> * Sling Models Impl 1.7.4
> When exporting a larger graph of Sling Models, the response time increased
> massively in comparison to Sling Models Impl 1.6.4.
> Many threaddumps look like this:
> {noformat}
> at
> org.apache.sling.feature.launcher.spi.Launcher$LauncherClassLoader.loadClass(Launcher.java:50)
> - waiting to lock <0x000000059b115828> (a java.lang.Object)
> at
> java.lang.ClassLoader.loadClass([email protected]/ClassLoader.java:521)
> at
> org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1458)
> at
> org.apache.felix.framework.BundleWiringImpl.access$300(BundleWiringImpl.java:79)
> at
> org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1976)
> at
> java.lang.ClassLoader.loadClass([email protected]/ClassLoader.java:521)
> at java.lang.Class.forName0([email protected]/Native Method)
> at java.lang.Class.forName([email protected]/Class.java:315)
> at
> org.apache.sling.models.impl.ReflectionUtil.isRecord(ReflectionUtil.java:127)
> at
> org.apache.sling.models.impl.model.ModelClassConstructor.isCanonicalRecordConstructor(ModelClassConstructor.java:90)
> at
> org.apache.sling.models.impl.ModelAdapterFactory.getBestMatchingConstructor(ModelAdapterFactory.java:803)
> at
> org.apache.sling.models.impl.ModelAdapterFactory.createObject(ModelAdapterFactory.java:718)
> at
> org.apache.sling.models.impl.ModelAdapterFactory.internalCreateModel(ModelAdapterFactory.java:409)
> at
> org.apache.sling.models.impl.ModelAdapterFactory.getAdapter(ModelAdapterFactory.java:219)
> at
> org.apache.sling.adapter.internal.AdapterManagerImpl.getAdapter(AdapterManagerImpl.java:121)
> at
> org.apache.sling.models.impl.ResourceOverridingRequestWrapper.adaptTo(ResourceOverridingRequestWrapper.java:90)
> at
> org.apache.sling.models.impl.ModelAdapterFactory.getModelFromWrappedRequest(ModelAdapterFactory.java:1374)
> [...]
> at
> com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:341)
> at
> com.fasterxml.jackson.databind.ObjectMapper.writeValue(ObjectMapper.java:3364)
> at
> org.apache.sling.models.jacksonexporter.impl.JacksonExporter.export(JacksonExporter.java:135){noformat}
> This seemed to be caused by SLING-12359, which adds support for Records. In
> [ReflectionUtils.isRecord|https://github.com/apache/sling-org-apache-sling-models-impl/blob/1161d8f05806de8d207005e86a6b5d45999e155d/src/main/java/org/apache/sling/models/impl/ReflectionUtil.java#L125]
> it constantly tries to load the class {{java.lang.Record}} which is not
> available in Java 11 and therefor throws a ClassNotFoundException (which is
> then caught to just return {{false}})
> The locking in the classloader and the inevitable ClassNotFoundException on
> Java11 cause a small performance penalty, which is amplified by the Exporter,
> when it is serializing a large amount of models.
> Note: The Sling Model Exporter is a feature known to create Sling Models, and
> depending on the Sling Model graph the number can be quite large. But also
> other functionality is affected which is creating Sling Models.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)