[ 
https://issues.apache.org/jira/browse/FELIX-6664?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17779548#comment-17779548
 ] 

Dominik Süß commented on FELIX-6664:
------------------------------------

Reworking my patch as I had an oversight - to be continued...

> Comment Removing on JSONSupport MemoryInefficient
> -------------------------------------------------
>
>                 Key: FELIX-6664
>                 URL: https://issues.apache.org/jira/browse/FELIX-6664
>             Project: Felix
>          Issue Type: Improvement
>            Reporter: Dominik Süß
>            Priority: Major
>
> While using JSONSupport in Context of the Sling Featurelauncher we recently 
> stumbled over an OOM exception related to how JSONSupport handles removal of 
> comments:
> {code}
> java.lang.OutOfMemoryError: Java heap space
>     at java.base/java.util.Arrays.copyOfRange(Arrays.java:4030)
>     at java.base/java.lang.StringUTF16.newString(StringUTF16.java:1025)
>     at java.base/java.lang.StringBuilder.toString(StringBuilder.java:454)
>     at 
> org.apache.felix.cm.json.io.impl.JsonSupport.removeComments(JsonSupport.java:308)
>     at 
> org.apache.felix.cm.json.io.impl.JsonSupport.createCommentRemovingReader(JsonSupport.java:244)
>     at 
> org.apache.felix.cm.json.io.Configurations.jsonCommentAwareReader(Configurations.java:70)
>     at 
> org.apache.sling.feature.io.json.FeatureJSONReader.readFeature(FeatureJSONReader.java:676)
> {code}
> https://github.com/apache/felix-dev/blob/91432d1a3f08520d5eb75b5c8e3443bb75f7c467/cm.json/src/main/java/org/apache/felix/cm/json/io/impl/JsonSupport.java#L233-L257
> The code does use a StringWriter to create a full String representation of 
> the featuremodel and then acts on that model.  As this featuremodel can 
> contain a lot of metadata in comments those can get a significant size and 
> when being used in a resource constrained environment can lead to memory 
> issues. 
> I prepared a patch that doesn't touch the removal logic but simply creates a 
> custom BufferedReader that performs the removal on read and therefore 
> eliminates the most prominent area for resource optimization.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to