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

20240912 JJUGナイトセミナー

Avatar for shimadamiyuki shimadamiyuki
September 12, 2024

20240912 JJUGナイトセミナー

Avatar for shimadamiyuki

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がどう、というよりは一般的な外部ライブラリでの問題