This is an automated email from the ASF dual-hosted git repository.

thiagohp pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tapestry-5.git


The following commit(s) were added to refs/heads/master by this push:
     new 6867911  TAP5-2694: trying to reduce memory usage by interning often 
used strings
6867911 is described below

commit 68679118998a1e67280dbbd088f85c874b1c8585
Author: Thiago H. de Paula Figueiredo <[email protected]>
AuthorDate: Thu Oct 7 19:34:12 2021 -0300

    TAP5-2694: trying to reduce memory usage by interning often used strings
---
 .../java/org/apache/tapestry5/internal/plastic/InheritanceData.java | 2 +-
 .../main/java/org/apache/tapestry5/plastic/MethodDescription.java   | 6 +++---
 .../java/org/apache/tapestry5/internal/bindings/PropBinding.java    | 2 +-
 .../apache/tapestry5/internal/services/PageElementFactoryImpl.java  | 5 ++++-
 4 files changed, 9 insertions(+), 6 deletions(-)

diff --git 
a/plastic/src/main/java/org/apache/tapestry5/internal/plastic/InheritanceData.java
 
b/plastic/src/main/java/org/apache/tapestry5/internal/plastic/InheritanceData.java
index cb98a37..2491503 100644
--- 
a/plastic/src/main/java/org/apache/tapestry5/internal/plastic/InheritanceData.java
+++ 
b/plastic/src/main/java/org/apache/tapestry5/internal/plastic/InheritanceData.java
@@ -180,7 +180,7 @@ public class InheritanceData
         // everything after the parameter list.
         int endOfParameterSpecIdx = desc.indexOf(')');
 
-        return name + ":" + desc.substring(0, endOfParameterSpecIdx+1);
+        return (name + ":" + desc.substring(0, 
endOfParameterSpecIdx+1)).intern();
     }
 
     /**
diff --git 
a/plastic/src/main/java/org/apache/tapestry5/plastic/MethodDescription.java 
b/plastic/src/main/java/org/apache/tapestry5/plastic/MethodDescription.java
index 5f8b88f..41a5568 100644
--- a/plastic/src/main/java/org/apache/tapestry5/plastic/MethodDescription.java
+++ b/plastic/src/main/java/org/apache/tapestry5/plastic/MethodDescription.java
@@ -107,9 +107,9 @@ public class MethodDescription implements 
Comparable<MethodDescription>
         assert PlasticInternalUtils.isNonBlank(methodName);
 
         this.modifiers = modifiers;
-        this.returnType = returnType;
-        this.methodName = methodName;
-        this.genericSignature = genericSignature;
+        this.returnType = returnType.intern();
+        this.methodName = methodName.intern();
+        this.genericSignature = genericSignature.intern();
 
         this.argumentTypes = PlasticInternalUtils.orEmpty(argumentTypes);
         this.checkedExceptionTypes = 
PlasticInternalUtils.orEmpty(checkedExceptionTypes);
diff --git 
a/tapestry-core/src/main/java/org/apache/tapestry5/internal/bindings/PropBinding.java
 
b/tapestry-core/src/main/java/org/apache/tapestry5/internal/bindings/PropBinding.java
index 78e254e..8a77781 100644
--- 
a/tapestry-core/src/main/java/org/apache/tapestry5/internal/bindings/PropBinding.java
+++ 
b/tapestry-core/src/main/java/org/apache/tapestry5/internal/bindings/PropBinding.java
@@ -46,7 +46,7 @@ public class PropBinding extends AbstractBinding implements 
InternalPropBinding
 
         this.root = root;
         this.conduit = conduit;
-        this.expression = expression;
+        this.expression = expression.intern();
         this.toString = toString;
 
         invariant = conduit.getAnnotation(Invariant.class) != null;
diff --git 
a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageElementFactoryImpl.java
 
b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageElementFactoryImpl.java
index 333527b..a3e0b74 100644
--- 
a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageElementFactoryImpl.java
+++ 
b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PageElementFactoryImpl.java
@@ -45,7 +45,10 @@ public class PageElementFactoryImpl implements 
PageElementFactory
 
         LiteralStringProvider(String string)
         {
-            this.string = string;
+            // Trying to avoid interning too many strings. Longer ones
+            // are less likely to be used more than once. Threshold here
+            // is completely arbitrary.
+            this.string = (string != null && string.length() <= 10) ? 
string.intern() : string;
         }
 
         public String provideString()

Reply via email to