怒Mは思いつきでモノを言う

やったことメモなどなど

「Java Day Tokyo 2018」に行ってきた。②

2018年5月17日(木)に開催されたJava Day Tokyo 2018に行ってきました。 基調講演は途中から参加で、用事があった夕方頃までセッションを聞きました。

で、気になった点をメモ書き。パート2。

[JSE-2] Project Valhalla

以下の2点の話し。 * Value Types (値型) * Generic Speciallization (ジェネリックの特殊化)

Project Valhallaには「VarHandles」があるけど、今回は対象外。
JJUG CCC 2018 Spring で話す予定。

プロジェクト名の由来

「Valhalla == Value Types」が似ているから、だそうですw

オブジェクトとプリミティブ

オブジェクト
  • ヒープで格納される
  • ヘッダがある
  • ポインタ参照
  • ミュータブル
  • Monitor がある
プリミティブ
  • どこでも格納できる
  • ヘッダがない
  • 値を直接渡す
  • イミュータブル
  • Monitor がない

オブジェクトの配列の場合、 配列の要素の中にヘッダを含めたオブジェクトが格納される。
オブジェクト ⇨ 参照の利用 ⇨キャッシュ・参照のミス ⇨ パフォーマンスの問題。
これは非効率。

そこで、Value Types。

Value Types

Value Typeの特徴として、 プリミティブと違ってクラスのような構成を持ち、 プリミティブのパフォーマンスを出す。

また、「だいたいintのような動きをするだろう」みたいな、 大雑把なルールで動く。
オブジェクトとプリミティブの要素を持つ感じ。

ジェネリクスの特殊化 (Generic Specialization)

Value Typesがオブジェクトの要素を持つとなると、ジェネリクスはどうなるのか?
構想としてはValue Typesをジェネリクスでも使えるようにしたい

ArrayList<int>みたいなことをやりたい!

Java 8からStream APIが実装されたけど・・・ * java.util.stream.IntStream * java.util.stream.FloatStream * etc・・・

作る方もツライ!
Customer<T>ToIntFunction<T>は作りにくいよう。

ジェネリクスの問題として、プリミティブの親クラスって何?
これはまだ解決していない。

最後に

Project Valhalla の目的としてパフォーマンス改善が挙げられるが、 それだけではなく、使いやすくなることも目的がある。