[
https://issues.apache.org/jira/browse/TAP5-2694?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17425818#comment-17425818
]
ASF subversion and git services commented on TAP5-2694:
-------------------------------------------------------
Commit 68679118998a1e67280dbbd088f85c874b1c8585 in tapestry-5's branch
refs/heads/master from Thiago H. de Paula Figueiredo
[ https://gitbox.apache.org/repos/asf?p=tapestry-5.git;h=6867911 ]
TAP5-2694: trying to reduce memory usage by interning often used strings
> Tapestry PlasticClassPool & PropBinding & LiteralStringProvider make
> thousands of duplicate strings
> ---------------------------------------------------------------------------------------------------
>
> Key: TAP5-2694
> URL: https://issues.apache.org/jira/browse/TAP5-2694
> Project: Tapestry 5
> Issue Type: Improvement
> Components: plastic
> Affects Versions: 5.7.3
> Reporter: Nikkie Folts
> Assignee: Thiago Henrique De Paula Figueiredo
> Priority: Major
> Attachments: Screen Shot 2021-09-29 at 4.02.26 PM.png, Screen Shot
> 2021-09-29 at 4.03.04 PM.png, Screen Shot 2021-09-29 at 5.23.53 PM.png,
> Screen Shot 2021-09-30 at 4.58.19 PM.png, Screen Shot 2021-10-04 at 2.07.35
> PM.png
>
>
> I have completed a memory profile of our Tapestry application, and found that
> the PlasticClassPool & PropBinding have lots of duplicate Strings in memory.
> h2. PropBinding
> Seems that both the `toString` and `expression` constructor parameters of
> PropBinding should be interned in the constructor.
> !Screen Shot 2021-09-30 at 4.58.19 PM.png!
> h2. PlasticClassPool
> After some investigation, it seems that the `InheritanceData#getValue()`
> method is the likely culprit.
> h4. Example Strings:
> "toString:()"
> "get:(Ljava/lang/Object;)"
> "getPropertyName:()"
> h4. The current method:
> {code:java}
> /**
> * Combines a method name and its desc (which describes parameter types
> and return value) to form
> * a value, which is how methods are tracked.
> */
> private static String toValue(String name, String desc)
> {
> // TAP5-2268: ignore return-type to avoid methods with the same
> number (and type) of parameters but different
> // return-types which is illegal in Java.
> // desc is something like "(I)Ljava/lang/String;", which means: takes
> an int, returns a String. We strip
> // everything after the parameter list.
> int endOfParameterSpecIdx = desc.indexOf(')');
> return name + ":" + desc.substring(0, endOfParameterSpecIdx+1);
> }
> {code}
> h4. The change is simple one-liner to the return statement:
> {code}
> return (name + ":" + desc.substring(0, endOfParameterSpecIdx+1)).intern();
> {code}
> h2. PageElementFactoryImpl$LiteralStringProvider
> The constructor for LiteralStringProvider should intern the string.
> h2. Also, Duplicate InheritanceData
> The profile also showed that there are lots of "duplicate" InheritanceData
> objects... the interning will help with their size, but why have so many
> duplicate?
--
This message was sent by Atlassian Jira
(v8.3.4#803005)