Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

で、ValhallaのValue Classってどうなったの?

で、ValhallaのValue Classってどうなったの?

2024.10.27 JJUG CCC 2024 Fall
「で、ValhallaのValue Classってどうなったの?」発表資料

Yuichi.Sakuraba

October 27, 2024
Tweet

More Decks by Yuichi.Sakuraba

Other Decks in Technology

Transcript

  1. Java の 2 つの型 Primitive Type Reference Type ビルトイン ユーザー定義

    NonNull Nullable Monomorphic Polymorphic 初期化不要 初期化必要
  2. record Point(double x, double y) {} Point points[] = {new

    Ponit(0.0, 0.0), .....}; points [0] [1] [2] [3] Point x y 0.0 0.0 Point x y 1.0 2.0 Point x y 3.0 2.0 Point x y 4.0 4.0
  3. CPU のメモリ構成 Register Main Memory L1 Cache L2 Cache L3

    Cache 容量 Small Large 10 byte 2 10 3 10 6 10 7 10 ~ 9 速度 Fast Slow 1 cycle 4 10-15 20-50 100 ~
  4. for (var p: points) { // p Λ࢖ͬͨॲཧ } points

    [0] [1] [2] [3] Point x y 0.0 0.0 Point x y 4.0 4.0 Point x y 1.0 2.0 Point x y 3.0 2.0 キャッシュミス多発
  5. for (var p: points) { // p Λ࢖ͬͨॲཧ } points

    [0].x 0.0 [0].y 0.0 [1].x 1.0 [1].y 2.0 [2].x 3.0 [2].y 2.0 [3].x 4.0 [3].y 4.0
  6. Value Class Identity がないクラス A value object is an object

    that does not have identity. JEP 401: Value Classes and Objects
  7. Value Class の書き方 value class Foo { ... } value

    record Bar( ... ) { } 継承も可能 Value Class になりうる標準クラス Number (Integer, Double...) java.time など Early Access 公開中 https://jdk.java.net/valhalla/
  8. Value Class の最適化 - 平坦化 Point points[] Point[] [0].x 0.0

    [0].y 0.0 [1].x 1.0 [1].y 2.0 [2].x 3.0 [2].y 2.0 [3].x 4.0 [3].y 4.0 ArrayList elementData ArrayList<Point> list Object[] [0].x 0.0 [0].y 0.0 [1].x 1.0 [1].y 2.0 [2].x 3.0 [2].y 2.0 [3].x 4.0 [3].y 4.0 record Rect(Point tl, Point br) {} Rect tl.x 0.0 tl.y 0.0 br.x 3.0 br.y 2.0
  9. 最適化の大敵 null Null-Restricted Nullable Type の導入 JEP draft: Null-Restricted and

    Nullable Types https://openjdk.org/jeps/8303099 JEP draft: Null-Restricted Value Class Types https://openjdk.org/jeps/8316779
  10. Null-Restriced/Nullable Type String! text = ... String? text = ...

    Null-Restriced Nullable 配列の初期化
  11. Null-Restriced/Nullable Type String! text = ... String? text = ...

    Null-Restriced Nullable 配列の初期化
  12. Value Class のまとめ Identity がなく、 イミュータブルなクラス 宣言時に value を付加するだけ 平坦化などの最適化のために導入

    サイズが小さく フィールドが適切なデフォルト値 or 初期化されている場合のみ Value Class にすべきデータ サイズが小さく、 イミュータブルなデータ ビジネスロジックで登場する値オブジェクト Record Class は、 ほとんどの場合 Value Class にすることが可能
  13. Conclusion Value Class: Code like a Class, Works like an

    int 平坦化などの最適化 イミュータブルなデータであれば適用可能 Null-Restriced/Nullable Type の導入 インスタンス初期化ロジックが変更 いつごろ導入されるかは???
  14. Reference JEP 401: Value Classes and Objects https://openjdk.org/jeps/401 JEP draft:

    Null-Restricted and Nullable Types https://openjdk.org/jeps/8303099 JEP draft: Null-Restricted Value Class Types https://openjdk.org/jeps/8316779 JEP 492: Flexible Constructor Bodies https://openjdk.org/jeps/492 JEP 218: Generics over Primitive Types https://openjdk.org/jeps/218 Valhalla - Where Are We? (JVMLS 2024) https://youtu.be/IF9l8fYfSnI?si=Ghx5r9SHuxQahu-9 Valhalla - Where Are We? (Devoxx BE 2024) https://youtu.be/eL1yyTwu4hc?si=TS6AkZQtRnoEjBdQ A New Model for Java Object Initialization (JVMLS 2024) https://youtu.be/ThtrTwooKDc?si=745Bno9z1UxW263Z