http://www.oracle.com/technetwork/jp/ondemand/online2018-javaday-4489556-ja.html
jdepsを用いれば特定のモジュールが使用している依存関係を明らかにできる。
jlink --compressを使えば20%以上JDKサイズを減らせるとのこと
Alpine Linuxを使えば小さいサイズのOSとして使えるよ
Class Data Sharingを使えば、コンテナ間のクラスファイルを共有してメモリを節約できる上に、起動時間とフットプリントを削減できる
実験的な機能だが、Ahead-of-Time Compilation(AOT)を使えばJITのように…
JDK10のコンテナにおける設定で以下が参考になるとのこと。 https://mjg123.github.io/2018/01/10/Java-in-containers-jdk10.html
-m でメモリの設定をでき、ヒープサイズ、GCのリージョンサイズなどに反映される。
https://github.com/babadopulos/docker-java-issues-demo
Maven内のjava -jar ${JAVA_OPTIONS}でオプションを設定し、dockerのオプションでJAVA_OPTIONSでヒープサイズの最大値を設定すること
デフォルトだと、コンテナは可能な限りメモリを使おうとするため、-memory, -memory-reservation, -memory-swapを設定すること。
モンテカルロ法を用いてCPUを大量に使うサンプルで実験した。
コンテナのCPU数を2つに設定したにも関わらず、8つのコアを使おうとしていた。
--cpu を設定することを忘れずに。
8コアのCPUを全て使うアプリケーションを2つ同時に動かすと、CPUの取り合いでアプリケーションの実行時間が長くなるが、2コアに絞ったアプリケーションを2つ動かした場合は実行時間はほぼ変わらなかった。取り合いが起こらないため。
/dev/random → /dev/
dockerにオプション(JAVA_OPTIONS=ーXdebug etc…)を与えてあげれば、Java Agent経由でリモートデバッグができるとのこと。
複数同時の実行をする場合は、docker-compose -p {app-1 or app-2} ...
また、Jenkinsを使う場合は、app-$BUILD_NUMBERのような設定をすれば自動でビルド番号が入る。
8の公式アップデートは2019年1月まで。終了後の更新版入所オプションは商用ライセンスの購入が必要。
無償版バイナリはフィーチャーリリース。年4回から年6回リリース。Java SE 8の商用機能が利用可能になる。JFR等。単独で再配布が可能になる。(GPLv2 + ClassPath Exceptionの採用)。ダウンロード先は http://jdk.java.net となる 優勝バイナリは、3年ごとのフィーチャーリリースの特定バージョンに対して設定。Java SE 11からリリース予定。
写真を参考のこと
2年に一度の 目標 。実際には不定期。 OpenJDKは仕様のリファレンス実装。Oracleからの公式バイナリ提供はなし。各ベンダーがビルドしてバイナリをリリース。
12,13,14,15,16に関しては長期サポートがないため注意。
画像参考のこと
画像参考のこと
以下の動画がGraalの参考になるとのこと。
https://www.youtube.com/watch?v=G-vlQaPMAxg
GraalはOracle Labsが開発しているOSS。 https://github.com/oracle/graal
スピーカーはJVMに13年近く携わっており、サン・マイクロシステムズ、オラクルでJVMに関するJSRに携わった。 今はTwitterのVMチームにいる。
http://openjdk.java.net/jeps/243
-XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI -XX:+UseJVMCICompiler -Djvmci.Compiler=<name of compiler>
ブートストラップで大量のメソッドをコンパイルする アプリケーションのメソッドをコンパイルする際、Javaヒープメモリを使う。ただしヒープの分離ができていない。 Graalのメモリは起動時に最も使われる。 mallocだろうが、Javaヒープであろうが、メモリはいつでも使われる。
使うべきGraalVMのオプションは以下の通り
-XX:+UnlockExperimentalVMOptions -XX:+Enable222222wwwer
OpenJDK 10をインストールするのに、wgetでtarballをダウンロード後、JAVA_HOMEのPATHを通して完了。
export JAVA_TOOL_OPTIONS="-XX:+UseParallelGC -Xmx512m -Xms512m"
java -versionで適用されたか確認すること
資料 https://www.jfokus.se/jfokus17/preso/Using-jPDM--a-performance-diagnostic-model.pdf
上記資料の34ページの問題分析のフローチャートが参考になる。
vmstatのus:ユーザー領域、sy:システム領域のCPUを見るなどして問題解析をしていく。
VisualVMを使ってスレッドダンプの解析、およびMacのアクティビティモニタで CPUの使用率を確認していた。
文字列結合に+を使っていた箇所をnew CompositeKey(hoge, fuga)に変換