LoginSignup
5
5

More than 5 years have passed since last update.

Javaでの文字列連結では、できるだけ+演算子を使おう!(第二弾)

Posted at

前に「Javaでの文字列連結では、できるだけ+演算子を使おう!」で書いたことが、Java 9で実現されるということを今更ながら知りました。

Java9で文字列の結合の速度を確認する」(@deaf_tadashi さん) に載っているJava 9のjavapコードを拝見しますと…

おお、文字列を+で連結するコードが、invokedynamic経由で次のメソッドを呼び出すバイトコードに変換されています!

java.lang.invoke.StringConcatFactory#makeConcatWithConstants(MethodHandles.Lookup, String, MethodType, String, Object... constants)

invokedynamic呼び出しになるとどうなるかというと、一度Java 9でコンパイルすれば、常にそのmakeConcatWithConstantsメソッドを呼び出す「お約束」になります。

以降は、Javaコア側でmakeConcatWithConstantsメソッドを最適化すれば、アプリ側のJavaソースを再コンパイルしなくても、そのまま、+連結の処理も最適化されることになります。

ちなみに、OpenJDKのJDK 9(64bit)のソースを見たければ、Mercurialをインストールし、hg clone http://hg.openjdk.java.net/jdk9/jdk9/jdk jdk9-jdkなどと叩きます(複製に時間がかかりますが)。

以上、「Javaでの文字列連結では、できるだけ+演算子を使おう!(第二弾)」でした。

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5