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)

Reply via email to