Upgrade to Pro — share decks privately, control downloads, hide ads and more …

20240912 JJUGナイトセミナー

shimadamiyuki
September 12, 2024

20240912 JJUGナイトセミナー

shimadamiyuki

September 12, 2024
Tweet

More Decks by shimadamiyuki

Other Decks in Technology

Transcript

  1. 自己紹介    島田 幸(しまだ みゆき) / mii    X(Twitter): @miitan_m1004 Java女子部運営スタッフ(2019〜) STORES株式会社

    決済 バックエンドエンジニア ゲームとシルバニアファミリーがすき アイコンはやぎのあかちゃん 2
  2. わからないポイント Class-File API がぴんとこない • クラスファイルって改めて言われると急にわからなくなる • 誰が何に使うの? • ASMって初めて聞いた

    Class-File API が 標準APIになると何がうれしいの? • 外部ライブラリで動いてるのに、標準APIにする必要があるの? • ASMをJDKに取り込めばいいんじゃないの? 6
  3. Class File Format Java Virtual Machine Specification でフォーマットが決まっている https://docs.oracle.com/javase/specs/jvms/se22/html/jvms-4.html ClassFile

    { u4 magic; u2 minor_version; u2 major_version; u2 constant_pool_count; cp_info constant_pool[constant_pool_count-1]; u2 access_flags; u2 this_class; u2 super_class; u2 interfaces_count; u2 interfaces[interfaces_count]; u2 fields_count; field_info fields[fields_count]; u2 methods_count; method_info methods[methods_count]; u2 attributes_count; attribute_info attributes[attributes_count]; } 9 クラスファイルバージョン 定数プール クラス情報 インタフェース、フィールド、 メソッド、属性のリスト
  4. Class File Format Java Virtual Machine Specification でフォーマットが決まっている https://docs.oracle.com/javase/specs/jvms/se22/html/jvms-4.html ClassFile

    { u4 magic; u2 minor_version; u2 major_version; u2 constant_pool_count; cp_info constant_pool[constant_pool_count-1]; u2 access_flags; u2 this_class; u2 super_class; u2 interfaces_count; u2 interfaces[interfaces_count]; u2 fields_count; field_info fields[fields_count]; u2 methods_count; method_info methods[methods_count]; u2 attributes_count; attribute_info attributes[attributes_count]; } 10 method_info { u2 access_flags; u2 name_index; u2 descriptor_index; u2 attributes_count; attribute_info attributes[attributes_count]; }
  5. Class-File API とは • クラスファイルを読み書きするためのAPI • サードパーティー製のライブラリがいくつか存在する ◦ ASM、Apache Commons

    BCEL、Javassist ・・・ • OpenJDKはASMというライブラリを使っていて、ライブラリのコピーのファ イルを内部に持っている 12
  6. 多分こういうこと① Java N が出る → 外部ライブラリが Java N に対応する その間

    Java N の新機能を安心して使えないじゃん 18 Java23リリース OpenJDK 外部ライブラリ Java23の機能に対応した バージョンがリリース Java23対応のライブラリを 取り込む
  7. 多分こういうこと② 19 2014/03 Java8 2011/07 Java7 2017/09 Java9 Java10〜半年ごとにリリース 2024/09

    Java23 LTS Non-LTS Javaリリース早くなったしクラスファイルの形式どんどん変わるから 外部ライブラリとのバージョンずれが余計にしんどいじゃん
  8. ASMのバージョン履歴を見てみる 2024/03に Java 23 対応版が出ていて、思ったより早めにアップデートされてる 20 https://asm.ow2.io/versions.html こういうことかな(想像) • Java

    23 対応版とは言いつつ、実際 Java 23 がリリースされるまでは確実じゃな いよね • ASMがどう、というよりは一般的な外部ライブラリでの問題