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

Java9勘所集

More than 1 year has passed since last update.

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が存在
  • さすがに起動時オプションを指定しないと適用されない

qualysite
地方を拠点とし、成長への意欲と技術力を高め続けるプロフェッショナル集団
https://www.qualysite.co.jp/
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
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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
ユーザーは見つかりませんでした