RFR: 8276926: Use String.valueOf() when initializing File.separator and File.pathSeparator

Jim Laskey jlaskey at openjdk.java.net
Wed Nov 10 12:57:41 UTC 2021


On Wed, 10 Nov 2021 09:22:32 GMT, Сергей Цыпанов <duke at openjdk.java.net> wrote:

> Looking into `File.pathSeparator` I've found out that currently we initialize it as
> 
> public static final String separator = "" + separatorChar;
> 
> Which after compilation turns into
> 
> NEW java/lang/StringBuilder
> DUP
> INVOKESPECIAL java/lang/StringBuilder.<init> ()V
> LDC ""
> INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder;
> GETSTATIC java/io/File.pathSeparatorChar : C
> INVOKEVIRTUAL java/lang/StringBuilder.append (C)Ljava/lang/StringBuilder;
> INVOKEVIRTUAL java/lang/StringBuilder.toString ()Ljava/lang/String;
> PUTSTATIC java/io/File.pathSeparator : Ljava/lang/String;
> 
> This can be simplified to
> 
> public static final String separator = String.valueOf(separatorChar);
> 
> Which is in turn complied into more compact
> 
> GETSTATIC java/io/File.pathSeparatorChar : C
> INVOKESTATIC java/lang/String.valueOf (C)Ljava/lang/String;
> PUTSTATIC java/io/File.pathSeparator : Ljava/lang/String;
> 
> The changed code is likely to slightly improve start-up time as it allocates less and does no bound checks.

It's unlikely that javac would do this kind of optimization (javac tends to produce code verbatim), but it might be worth filing a RFE.

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

PR: https://git.openjdk.java.net/jdk/pull/6326


More information about the core-libs-dev mailing list