> The string concatenation of java.base module is implemented based on 
> StringBuilder, which will result in extra object allocation and slow 
> performance. We can solve this problem by using String.concat method and 
> StringConcatHelper to provide concat method.
> 
> for example, 
> 
> * use "+"
> 
> class ClassDesc {
>     default String displayName() {
>         c.displayName() + "[]".repeat(depth)
>     }
> }
> 
> 
> bytecode:
> 
> 106: new           #40                 // class java/lang/StringBuilder
> 109: dup
> 110: invokespecial #42                 // Method 
> java/lang/StringBuilder."<init>":()V
> 113: aload_2
> 114: invokeinterface #195,  1          // InterfaceMethod 
> displayName:()Ljava/lang/String;
> 119: invokevirtual #50                 // Method 
> java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
> 122: ldc           #198                // String []
> 124: iload_1
> 125: invokevirtual #200                // Method 
> java/lang/String.repeat:(I)Ljava/lang/String;
> 128: invokevirtual #50                 // Method 
> java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
> 131: invokevirtual #53                 // Method 
> java/lang/StringBuilder.toString:()Ljava/lang/String;
> 134: areturn
> 
> 
> * use String#concat
> 
> c.displayName().concat("[]".repeat(depth))
> 
> 
> bytecode:
> 
> 112: ldc           #198                // String []
> 114: iload_1
> 115: invokevirtual #200                // Method 
> java/lang/String.repeat:(I)Ljava/lang/String;
> 118: invokevirtual #86                 // Method 
> java/lang/String.concat:(Ljava/lang/String;)Ljava/lang/String;

Shaojin Wen has updated the pull request incrementally with three additional 
commits since the last revision:

 - more concat
 - Suggestions from @ExE-Boss
 - concat Object value

-------------

Changes:
  - all: https://git.openjdk.org/jdk/pull/20705/files
  - new: https://git.openjdk.org/jdk/pull/20705/files/16ec24a8..ea8c814e

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=20705&range=01
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=20705&range=00-01

  Stats: 25 lines in 6 files changed: 7 ins; 7 del; 11 mod
  Patch: https://git.openjdk.org/jdk/pull/20705.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/20705/head:pull/20705

PR: https://git.openjdk.org/jdk/pull/20705

Reply via email to