📝Javaプラットフォーム
January 17, 2023
tags. 🔖Java
Java プラットフォーム #
Javaで記述されたプログラムの開発および実行を行うことのできるソフトウェア群の総称.
📝Java実行環境(JRE) #
Java Runtime Environment, JRE.
コンピュータでJavaプラットフォームを動かせるようにするためのツールセット.
📝Java SEや📝Java仮想マシン(JVM)とセットで提供される.
👉JVM #
📝Java SE #
Java Platform, Standard Edition.
Javaで使用できるStandardなAPIをまとめたもの.
📝Java開発環境(JDK) #
Java Development Kit, JDK.
Java言語を使ってJavaアプリケーションを開発するためのツールセット, 開発環境.
JDKをインストールするとJREもついてくるところが紛らわしさを生み出している.
📝JAR #
JAR #
Java ARchiveの略. Java Classファイルとメタデータをアーカイブしたもの.
- Using JAR Files: The Basics (The Java™ Tutorials > Deployment > Packaging Programs in JAR Files)
- jar - Java Archive ツール
UberJAR #
生産物のJarだけでなく依存関係のjarも含むjarの塊.
Javaをつかってスタンドアロンアプリケーションとして起動することができる.
java -jar exampleapp.jar
Javaのソフトウェアを配布しようとしたときにサードパーティの依存ライブラリも含めてまとめて配布(all-in-one)できるというメリットがあるものの, 冗長が多くなったり容量が大きくなるなどのデメリットもある.
fat JAR, JAR with dependenciesともいう. Uberはドイツ語でOverの意. UberEatsとは無関係.
- Uber-JAR - imagej
- java - What is a shaded jar? And what is the difference/similarities between uber jar and shaded jar? - Stack Overflow
JDK開発ツールまとめ #
開発を補助するツールがいろいろある. それらのコマンドラインツールは(たとえばManjaro Linuxだと), /usr/lib/jvm//default/bin の配下にうじゃうじゃインストールされている.
- jps: JavaプロセスID確認.
- jstack: スタック情報出力.
jps #
JVM上で動作しているJavaプログラムのPIDを確認. 他のコマンドもたいていPIDを指定して情報を確認するので, まずこのコマンドを叩くところからが起点になる.
現在動いているJVMのオプションを知るには,
$ jps -lvm
jcmd/jmap #
ヒープダンプ取得.
$ jcmd <pid> GC.heap_dump heapdmp.hprof
# jmapは古いらしい.
$ jmap -dump:format=b,file=./heapdump.hprof <pid>
jstat #
JVMのメモリ使用量調査.
以下で, 1秒ごとに使用量を表示. -hでヘッダ情報を間に挟む間隔を指定.
# -gc: 実際に使用している数値をKBで表示.
$ jstat -gc -h 3 <jpid> 1000
# -gcutil: 実際に使用している数値の使用率(%)を表示
$ jstat -gcutil -h 3 <jpid> 1000
ヒープ領域の使用量 = (S0C + S1C + EC + OC) / 1024.
JDKまとめ #
OpenJDK #
Javaのフリーかつオープンソースの実装. Oracleが中心になって開発されている.
対義語はOracle Java.
Zing JVM #
GCによるいわゆる “stop-the-world pause"がないという, 驚きのGCアルゴリズム(C4)が話題のJVM.
- Why we chose Java for our High-Frequency Trading application | by Jad Sarmo | Medium
- Tricks of the Trade: Tuning JVM Memory for Large-scale Services | Uber Blog
- LMAXがAzulのZing JVMを使ってレイテンシを50%改善
- Clojure on Azul Zing JVM