Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

前に「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での文字列連結では、できるだけ+演算子を使おう!(第二弾)」でした。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away