LoginSignup
23
19

More than 5 years have passed since last update.

Java9勘所集

Last updated at Posted at 2017-10-02

Java9

2017/09/21(※米時間)リリース。
「※米時間」って米米CLUB思い出しません?
今「米米CLUB」って一発変換できたぞなんだこれ。

変更一覧

JDK9 Features

多い

着眼点

  1. インパクト
    • ソースを弄らなくてもリリース済みのブツに影響を与えるようなヤツ
    • これからの設計、コーディングに影響を与えるようなヤツ
  2. 趣味
    • なんかVM近辺に影響してるヤツ

抽出

Jigsaw系のヤツ

もう一杯情報出てるので細かくいうことはないですが、あのパッケージ関連グラフ見ると「ウッ」ってなりますね

jshell

もう一杯(ry

String周りのヤツ

Compact Strings

Indify String Concatenation

  • "str" + "ing"のやり方をInvoke dynamic命令を使用するようにして改善
  • 過去もろもろあったStringBuffer→StringBuilderの経緯とかを気にしなくてもよくなるように
  • これからの時代、何でもかんでも「StringBuilderを使え!」は時代遅れと明確に
  • でも一応forとかwhile中だったり変数を含む文字列結合はBuilder使いましょうね
  • indyで実行時に向き先変えるんで、コンパイル済みのライブラリとかでも恩恵を受ける
    • 2017/11/06 modified
    • Java9によってindyで結合するようにコンパイルされたライブラリであれば、以降のバージョンで使用されてもその時々の向き先を使用するようになる
    • tsuyoshi_choさんから頂いた指摘で「indyを使うようにコンパイルされたライブラリ限定」であることを明示して修正

Store Interned Strings in CDS Archives

  • まず、java.lang.String#intern()ってメソッドがあるんですが、そいつが「今までに使用したStringをプールしてて、そこから引っ張ってくる」
  • このプールする場所の改良で、「別プロセスでも共有できるプールを用意してメモリを削減する」
  • ただし、64bit版かつG1GC利用時の場合のみ適用
  • メモリ削減が目標なので高速化とかはしない、というか少し遅くなってる模様、「<2-3%」だから「2-3%以内の劣化にとどまる」かしら
  • そもそもjava.lang.String#intern()が重い処理なので気にする内容ではない気がする

Deprecate the Applet API

アプレット? 奴なら死んだよ。

Unicode 8.0

何気なくバージョンアップされている内部表現。
Unicode7.0も居る。

Make G1 the Default Garbage Collector

  • もう一杯(ry
  • デフォルトのガーベッジコレクタがG1になります
  • ヒープを分割統治するので大容量ヒープの際にガーベッジコレクトに必要な時間が予測可能かつ小規模に
  • 有効なヒープサイズは6GBあたりからであるもよう
  • GCチューニング専門の人は「1度あたりのGC時間から逆算してリージョンサイズを決めること」って言ってた

UTF-8 Property Files

  • 地味にリソースバンドルにUTF-8が使えるようになる
  • ISO-8859-1とUTF-8で明示して使い分け可能

java.util.stream.Streamの処理が増える

  • Predicateを受け取って、条件を満たすまで続く無限Streamとか地味にうれしい
  • パラレルなFiles.lines()とかもうれしい
    • でもメモリマッピングしてかららしいのでやっぱりシーケンシャルにStream#read()することが多そう
    • そもそもパラレルにjava.ioのStream使ってうれしくなる状況とかほぼなさそう、分散系のファイルシステム、ブロードキャストぐらい?

Convenience Factory Methods for Collections

Set<String> s = Set.of("a", "b", "c");
作らなくてもよくなる。

Java-Level JVM Compiler Interface

  • JVMに対してマシンコードをぶち込めるとかいう触れてはいけない案件
  • 動的コンパイラを作成する際とかに使用するものらしく、Graalで使用するとか
  • JITの進み具合とか、現在コードがどういう風に展開されているかを取得するAPIが存在
  • さすがに起動時オプションを指定しないと適用されない

23
19
4

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
23
19