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