【Java】JDKの中身ってどうなってるの?
開発系SEの友人と話していたとき、JDKの話になりました。
JDKとはJava DevelopmentTool Kitの略で、Javaでの開発・実行を行う際に必要なライブラリやツール群がまとまったキットです。
多くはOracleやMicrosoftなどのベンダーから提供されており、開発者はベンダーから提供されるドキュメントなどを適宜参照しながら開発に励みます。
つまり、JDKとは「世界のルール」と言い換えても良いかもしれません。
で、こんな会話がありました。
私「OracleJDKが基本なわけじゃん?でも、今回はMicrosoftのOpenJDKを使うことになったんだよ。それをベースにしたプログラムがちゃんと動くか心配でさ~。OpenJDKだからパッチも提供されるかわかんないしさ~」
友人「ははは。大変だな。でも最悪直せばいいんじゃね?」
できるの!?
なるほど。そう言われてみると、わからなくはありません。JDKも中身はjavaで書かれているはずなのだから直せる…はずです。
しかし、それは「ルールを変える」行為。開発系SEの視点からは分からないですが、ちょっとPG知識があるだけのインフラ系SEの私としては、神にも等しい所業なんですが…
まあ、実際に仕事で使うかどうかはともかくとして、知的好奇心はそそられます。
というわけでJDKというものを改めて調べ直し、JDK自体の修正は出来るのか、という観点でその中身を確認してみました。
なんとなくMirosoftのOpenJDK17をインストールしてみます。
ちなみにインストールされてPathが通る場所は以下。
OracleJDKとは全然違う場所にあります(このせいでアプリケーションの通常設定では動かず、設定を調べるハメになる事象が多々ある)
C:\Program Files\Microsoft\jdk-17.0.11.9-hotspot
中身はこんな感じ。
それぞれのフォルダの中身を見て行こうと思います。
bin
バイナリフォルダ。実行形式(DLL)のfileがいっぱいですね!
あとexeもいっぱいある。正直使い方はわかりません。コマンドでオプション付けて実行することしかわかりません。
でも下記URLに詳しく書いてありますから、使用する際はリンクを見ながら使えば良さそうです。簡単。
dllファイルは実行形式ファイルなので(コンパイル済みなので)中身は書き換えられるような代物じゃないです。なので友人が言ってたのはここではないはず。
ちなみにServerってフォルダがありますが、これはjava virtual machineっていうjavaの実行インスタンスを作成するためのライブラリが入っているフォルダです(のはず)
conf
読んで字のごとくコンフィグファイル群が置かれていました。
ログ設定等が置かれているので、javaでの開発中やプログラム起因だと思われる内容を解析したいときなどに参照すると幸せになれそうです。
include
インクルード…?はて。C言語みたいなワードだなあ。そんでhファイルがぞろぞろ。javaにもインクルードってあるみたいですがjspファイルを呼び出すみたいですし。
って思ってたらホントにC言語用でした。
C言語からjavaを呼び出すイメージは以下が参考になります。
あとjavah.exeってツールで君だけのインクルードファイルを作れちゃうぜ?とのこと。
Legal
法的要件のドキュメントです。ライセンス条項とか。意識するべきですが、技術的な観点では見るべきとこなし。
Lib
ライブラリ。開発ツールで使用するライブラリ群とか、その他コアじゃないファイル群が入っているらしいです。
確かにbinで見たツール名のlibファイルとかがある。
jfcフォルダ ・・・ java flight recoderツールのライブラリ。パフォーマンス分析とかに使われる。
securityフォルダ ・・・ アクセス権制御とかポリシー関連で使われるファイル群が入ってる。
なんか他にも色々入ってますが多すぎるのでまた今度。
で、気になったのはこのsrcファイル。
これ、JDKの元ネタじゃね?と思ってたらやっぱりそうでした。
ってことは、javaのバグだったり仕様だったりで困っていたとして、それをデバッグして修正して解決したろ!って思った場合は、このソースコードを読み込んで、修正して、コンパイルして配置すれば良さそうです。
なんか出来そう(出来るとは言ってない)
良い学びを得ました。