Roy Teeuwen created SLING-13277:
-----------------------------------
Summary: Backport to 1.x - Using a String instead of
StandardCharset to instantiante strings requires a lock
Key: SLING-13277
URL: https://issues.apache.org/jira/browse/SLING-13277
Project: Sling
Issue Type: Improvement
Components: ResourceResolver
Reporter: Roy Teeuwen
Fix For: Resource Resolver 1.12.16
Backport of SLING-13260 to the 1.x maintenance branch.
The change was applied to master (commit
08e778693e9a5f9f2e5ceeb30c67ba3202928e4a) and released in Resource Resolver
2.0.6, but was never backported, so the 1.x line still lacks it.
h3. Original description (SLING-13260)
{quote}
Under heavy load we see many threads locking with the following pattern [1].
This happens because the
[URI|https://github.com/apache/sling-org-apache-sling-resourceresolver/blob/master/src/main/java/org/apache/sling/resourceresolver/impl/helper/URI.java#L4022]
class passes a String for the Charset, this results in the String class
calling
java.lang.String.[lookup|https://github.com/openjdk/jdk/blob/master/src/java.base/share/classes/java/lang/String.java#L1662-L1665]
which locks in order to perform the lookup.
A simple enhancement is to pass the Charset as such to prevent the
[lookup|https://github.com/openjdk/jdk/blob/master/src/java.base/share/classes/java/lang/String.java#L1690-L1692].
[1]
{code:java}
java.lang.Thread.State: BLOCKED (on object monitor)
at
sun.nio.cs.StandardCharsets.charsetForName([email protected]/StandardCharsets.java:1304)
- waiting to lock <0x000000041005a680> (a sun.nio.cs.StandardCharsets)
at java.nio.charset.Charset.lookup2([email protected]/Charset.java:486)
at java.nio.charset.Charset.lookup([email protected]/Charset.java:475)
at java.nio.charset.Charset.forName([email protected]/Charset.java:539)
at java.lang.String.lookupCharset([email protected]/String.java:848)
at java.lang.String.<init>([email protected]/String.java:1390)
at
org.apache.sling.resourceresolver.impl.helper.URI.getAsciiString(URI.java:4022)
at org.apache.sling.resourceresolver.impl.helper.URI.encode(URI.java:1776)
at org.apache.sling.resourceresolver.impl.helper.URI.setPath(URI.java:2938)
at
org.apache.sling.resourceresolver.impl.helper.URI.parseUriReference(URI.java:2118)
....{code}
{quote}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)