RFR: 8338937: Optimize the string concatenation of ClassDesc [v2]

Shaojin Wen duke at openjdk.org
Tue Aug 27 11:52:38 UTC 2024


> 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


More information about the core-libs-dev mailing list