Movatterモバイル変換


[0]ホーム

URL:


Yuji Kubota, profile picture
Uploaded byYuji Kubota
PDF, PPTX18,487 views

Introduction to Java 11: Support and JVM Features #jjug

Slide for JJUG Night Seminar 2018/Oct

Embed presentation

Download as PDF, PPTX
Java11:サポートとVM機能編KUBOTAYuji(@sugarlife)JJUGNightSeminar2018/Oct
Java11の「サポート」
Disclaimer解りやすくするためざっくり説明している箇所があります発表者は5年以上OpenJDKのサポートを担当していた経験上、しばしば商用/本番環境でもOpenJDKを利用している前提で話をしますJavaのサポート提供企業のいずれとも関係がなく、各企業のサポート内容詳細については各企業に問い合わせください
本資料でのサポートの定義開発サポートバグの修正セキュリティ対応(脆弱性修正)機能拡張、新機能開発を含まない維持管理開発配信サポートバイナリの配信・提供バグ・脆弱性修正を行ったアップデートの配信一定期間だけ無償なケースもある問合せサポートSLAが定められている問合せ対応(障害対応、性能問題等)コンサル企業・団体独自の経験提供
誰がやってるのか?開発サポートOpenJDKコミュニティJava11は現在は3年間の予定独自Java開発企業・団体(ここではTCKを通ったもの)配信サポート(一例、Java11に限定)Oracle,AzulSystems(Zulu,Zing),RedHat,IBMAdoptOpenJDK,各Linuxディストリビューション(Debian,Ubuntu,Fedora,Arch,etc)OpenJDKコミュニティは配信していない問合せサポートバイナリ配信サポートの一部企業、およびその他の企業
無償で使いたい人向けの結論AdoptOpenJDKから入手しようJava11の無償「配信サポート」期間が一番長い(4年間)
想定問答集つらつら説明されるよりは自身の問題として捉えると身に入りやすいのでこの形式で説明します
OpenJDKってなに?オープンソース実装のJavaです。http://openjdk.java.net/多くの人が使っていたであろうOracleJDKのPublicUpdate(≒無償版)がJava11から提供されないので注目が集まりましたコミュニティのリード役はOracleでパッチ投稿数も段違いです。以前はOracleしかコミットできない部分もありましたが、現在は改善が進められ、よりオープンなコミュニティへと前進しています
OpenJDKはLTSを提供しないの?本資料における「開発サポート」であればサポート期間は長い。Java9や10は半年でしたがJava11は現時点で3年間の予定です。今後より長くなる可能性もあります。前例としてJava6はOracleがメンテナンスリードを退役してからはRedHatがリードを務めてました。「配信サポート」や「問合せサポート」は以前からやっておらず、今後も予定はありません
Oracleから無償なJava入手できないの?できます。OracleOpenJDKと良く呼ばれるようになったOracle社がビルドしたOpenJDKがhttp://jdk.java.netから無償で入手できます。恐らく他と比較して最速で入手できますが、配信サポートは半年間(※)です。(※:『オラクルの公式OpenJDKバイナリは6カ月でアップデートを終了』の項参照)OpenJDKではない方のOracleJDKについては新しいライセンスで公開されています。ライセンスを読んで利用する必要があります
OpenJDKは商用で利用できる品質なの?DEFINITELYYES.前例についてはこちらの資料も参考にしてください
OpenJDKに乗り換えるのは簡単なの?簡単です。OracleJDKからOpenJDKのマイグレーションはあまり問題は起きにくいですが、証明書周りが若干ネックになるケースもあります。大半はOpenJDKの実装というよりはライセンス関係の問題です。なお、Java8からJava11のマイグレーションはOracleJDKでもOpenJDKでも等しく面倒です
AdoptOpenJDKリリース遅れてるけど大丈夫?大丈夫です。元々サードパーティのOpenJDKはリリース後にテストなどをするのでマイナーアップデートでも1‑2週間ぐらいは遅れます。AdoptOpenJDKもリリース後からビルドやテストを実施してるので遅れることは必然です。Java11のリリース状況はここで確認できます。約一週間ぐらいでリリースされましたちなみにOracleだけがほぼ同時に配信していました。0dayattackリスクを勘案する場合、OracleOpenJDKが選択肢に入ります
JREって無くなったんでしょ?※JRE:Java開発ツールキットなどを除いたJavaランタイム環境のみに限定されたパッケージ、インストーラ、バイナリWindows/MacOSは実質その通り。LinuxディストリビューションのOpenJDKは元々別パッケージで提供されているのでおそらく引き続き提供される(全部は確認しておらず未リリースもあります)例: openjdk-11-jre と openjdk-11-jdk (Ubuntu等)例: java-1.11.0-openjdk と java-1.11.0-openjdk-devel(Fedora,RHEL等)より軽量な java-1.11.0-openjdk-headless もあるJavaの実行バイナリサイズを削減する手段はjlinkなどが別に用意されているので、コンテナ等ではそちらを利用すると良いでしょう
JavaFXってなくなったんでしょ?いいえ。正しくはOracleJDK同梱ではなくなりました。OpenJDKは昔から同梱していません。OpenJDKにも同梱される流れを期待していたら同梱をやめてしまった...OpenJDKコミュニティ内にJavaFXのオープン実装であるOpenJFXのプロジェクトがあります。バイナリはこちら(openjfx.io)からダウンロードできます。
Javaって有償になったんでしょ?いいえ。OracleJDKの「バイナリ配信サポート」が有償になりました。Oracleはこの代替として「OracleOpenJDK」を提供しています。
いつまでにJava11に乗り換えるべきか?Java8の「配信サポート」期限が切れる前に乗り換えましょうOracleJDK:有償:2025/3無償(PublicUpdate):2019/1(個人向けは2020/12)RHELのOpenJDK:2023/6AzulSystems:ZuluEnterprise:2026/3Zing:2025/3IBMJava:2022/4参考:次LSTのJava17は2021/9リリース予定
すぐにJava12に乗り換える必要あるんでしょ?ないです。※発表者の個人的観点です仕事であればOpenJDKの開発サポートが短いバージョンは無視してOK個人であれば好き好き。私はJava12を使ってます
何を使うべきか?※発表者の個人的観点です基本は予算と要件に合わせて選択する無償でバイナリ配信サポートなら「AdoptOpenJDK」かLinuxディストリビューション提供パッケージ4年以上のバイナリ配信サポートなら有償サポートを買うクラウド利用者は利用パッケージのサポート内容に依存する
サポート要らなくない?※発表者の個人的観点です多くの場合、最低限必要なのは配信サポートです。無償であればAdoptOpenJDKが4年間のサポート予定なので、次のLTSであり3年後にリリース予定のJava17にマイグレーションする猶予が1年あります。有償であれば8年間のサポート提供する企業もあり、より猶予があります。問合せサポートは組織と予算とSLAに依存します。不要であれば不要でしょうし、組織内でエース級を育てるのもアリです。エース級は外にも余り居ません。開発サポートはOSSですので誰でも開発に参加できます。組織立って参加できればそれが最善です。OpenJDKを元に独自JDKを開発する企業もあります
Java11の「VM機能」
JEP330:LaunchSingle‑FileSource‑CodeProgramsjavac でコンパイルして java で実行するのが基本だったスクリプト言語のようにソースコードを直接実行する形式を条件付きで対応source‑filemodeと呼ばれる
単体ファイルの実行Javaソースファイルを直接 java コマンドで実行するjava Hoge.java制約条件1つのJavaファイルで完結してるソース内で最初に出現するトップレベルクラスがmain(String[]) を持つ
良い例public class HelloWorld {public static void main(String[] args) {System.out.println("Hello World.");}}$ docker run --rm -it -v $(pwd)/src:/src openjdk:11-jdk ¥java /src/Test.javaHello World.
悪い例public class Hoge {}public class Fail {public static void main(String[] args) {System.out.println("Fail");}}$ docker run --rm -it -v $(pwd)/src:/src openjdk:11-jdk ¥java /src/Fail.javaerror: can't find main(String[]) method in class: Hoge
スクリプト化Javaソースをスクリプトのように扱う./Hoge.java制約条件ファイル冒頭に実行するJavaを指定する#!<JAVA_HOMEフルパス>/bin/java --source 11--source でバージョン指定も必須それ以外は単体ファイルと一緒
良い例#!/usr/lib/jvm/java-11-openjdk-amd64/bin/java --source 11public class Hoge {public static void main(String[] args) {System.out.println("Hello World by shellbang");}}$ docker run --rm -it -v $(pwd)/src:/src openjdk:11-jdk ¥/src/test.shHello World by shellbang
どうやってるの?1.Source‑Launcherクラスが起動2.source‑filemodeで指定したクラスをコンパイル3.インメモリに展開4.クラスローダでロードカスタムクラスローダでロード後アプリケーションクラスローダに委譲つまりアプリケーションクラスパスに含めたクラス群から、指定したクラスは参照できない5. main(String[]) を発火
JEP328:FlightRecorder最高峰のプロファイラOracleJDK商用機能の一つがオープンソース化
できることボトルネック調査GC、同期処理、I/O処理、メソッド毎のCPU時間など収集可能な情報の例OS:メモリ、CPU、プロセス情報、nativeライブラリ情報JVM:起動オプション、GC設定、メソッドプロファイリング、ヒープメモリ状況JDKライブラリ:ソケットIO、ファイルIO、エラー情報、モジュール情報柔軟なイベント収集・監視方法アプリケーション開始から終了までの全情報をダンプ-XX:StartFlightRecording=dumponexit=trueカスタムイベントを作成して独自情報を収集jdk.jfr.Event 等を利用する(OracleJDKでの実装例)
注意点FlightRecorderはツールではなくてJVMの情報収集機能可視化にはJDKMissionControlのバージョン7以降が別に必要。これは同梱されてないJMCもFlightRecorderと同時にオープンソース化したOracleJDKのオプション構成から変更されているので流用不可
JEP318:Epsilon:ANo‑OpGarbageCollector(Experimental)何もしないメモリアロケータ-XX:+UseEpsilonGC
No‑OpGCGCは不要メモリを回収するのが仕事ですが、EpsilonGCは通称「no‑opGC」と呼ばれる、メモリ回収を行わないGCです。Javaアプリケーションに割り当てたヒープサイズを超えて使用しようとした場合ただちにメモリエラー(OutOfMemoryError)になります。
注意点1通常はJVMにメモリ管理を任せているため、意図しないメモリフットプリントの増大や負荷が多少なりとも発生します。EpsilonGCはこの影響を極力無視できるようにすることを目的としており、プロダクションではなく主に開発や研究/実験の目的で利用されることを想定しています。JITとか。System.gc() も当然動きません。
注意点2このGCは限定的に「使える」。ただし、ヒープとスタックの違いガベージを生成しないオブジェクトとは何かTLABサイズがパフォーマンスに影響するEpsilonGCはアロケート方法が独自自分のアプリケーションのライフサイクルとヒープサイズなどを把握した上で使うことが望ましい。なおExperimentalです。
JEP333:ZGC:AScalableLow‑LatencyGarbageCollector(Experimental)PauselessGC-XX:+UseZGC
PauselessGC今までのGCはヒープサイズやライブセット数に比例して完全停止時間(Stop‑The‑World,STW)が長くなる問題があったSTWをRootScanのみに限定することでこれを解決したGC各処理の徹底的な並列化、他ColoredPointers等よるロードバリア処理改善Coloredpointer:マーク状態等を表現データ構造やページング処理等の工夫もとはいえconcurrentclassunloadingがまだ未実装世代別GCではない等、従来GCとアルゴリズムが大きく異なる
注意点164bit限定ColoredPointersが64bit前提です仮想メモリを利用しているCompressedOopsもサポートしてませんレイアウトは ZBitField を追いかけてみよう開発動機的にも32bitサポートは望み薄Linux限定シンプルにLinux前提の実装がちょくちょくある需要があれば他も対応するらしい
注意点2現時点ではExperimentalであり、本番/商用で使うべきではないです。使う場合、仕様変更の追跡が必要普通に変更がガンガン入ってるクラスアンローディング周りは確実に(大規模)変更が入るLargePagesやNUMAなどのメモリ効率性に関わる設定や監視も必要小さいヒープなら関係ないが、その場合既存GCで良いなどを把握した上で使うことが望ましい。
Question?KUBOTAYuji(@sugarlife)

Recommended

PDF
C34 Always On 可用性グループ 構築時のポイント by 小澤真之
PDF
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
PDF
Sql server 2016 always on 可用性グループ new features
PPTX
PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
WebSocket / WebRTCの技術紹介
PDF
Always on 可用性グループ 構築時のポイント
PDF
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)
PDF
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
PDF
Mavenの真実とウソ
PPTX
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
PDF
これからのJDK 何を選ぶ?どう選ぶ? (v1.2) in 熊本
PPTX
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
スマートフォン向けサービスにおけるサーバサイド設計入門
PDF
DBスキーマもバージョン管理したい!
 
PDF
そんなトランザクションマネージャで大丈夫か?
PDF
PostgreSQL 15の新機能を徹底解説
PDF
MQTTとAMQPと.NET
PDF
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PPTX
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
PDF
コンテナ未経験新人が学ぶコンテナ技術入門
PDF
ClassLoader Leak Patterns
 
PDF
Javaのログ出力: 道具と考え方
PPTX
GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~
PDF
並行処理初心者のためのAkka入門
PDF
NetflixにおけるPresto/Spark活用事例
PDF
Javaはどのように動くのか~スライドでわかるJVMの仕組み
PDF
マルチテナントのアプリケーション実装〜実践編〜
PDF
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
PDF
JDK: 新しいリリースモデル解説(ver.2.1)
PDF
JDK: 新しいリリースモデル解説(ver.2.0)

More Related Content

PDF
C34 Always On 可用性グループ 構築時のポイント by 小澤真之
PDF
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
PDF
Sql server 2016 always on 可用性グループ new features
PPTX
PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
WebSocket / WebRTCの技術紹介
PDF
Always on 可用性グループ 構築時のポイント
PDF
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)
PDF
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
C34 Always On 可用性グループ 構築時のポイント by 小澤真之
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Sql server 2016 always on 可用性グループ new features
PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
WebSocket / WebRTCの技術紹介
Always on 可用性グループ 構築時のポイント
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5

What's hot

PDF
Mavenの真実とウソ
PPTX
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
PDF
これからのJDK 何を選ぶ?どう選ぶ? (v1.2) in 熊本
PPTX
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
スマートフォン向けサービスにおけるサーバサイド設計入門
PDF
DBスキーマもバージョン管理したい!
 
PDF
そんなトランザクションマネージャで大丈夫か?
PDF
PostgreSQL 15の新機能を徹底解説
PDF
MQTTとAMQPと.NET
PDF
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PPTX
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
PDF
コンテナ未経験新人が学ぶコンテナ技術入門
PDF
ClassLoader Leak Patterns
 
PDF
Javaのログ出力: 道具と考え方
PPTX
GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~
PDF
並行処理初心者のためのAkka入門
PDF
NetflixにおけるPresto/Spark活用事例
PDF
Javaはどのように動くのか~スライドでわかるJVMの仕組み
PDF
マルチテナントのアプリケーション実装〜実践編〜
PDF
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
Mavenの真実とウソ
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
これからのJDK 何を選ぶ?どう選ぶ? (v1.2) in 熊本
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
スマートフォン向けサービスにおけるサーバサイド設計入門
DBスキーマもバージョン管理したい!
 
そんなトランザクションマネージャで大丈夫か?
PostgreSQL 15の新機能を徹底解説
MQTTとAMQPと.NET
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
コンテナ未経験新人が学ぶコンテナ技術入門
ClassLoader Leak Patterns
 
Javaのログ出力: 道具と考え方
GraalVM を普通の Java VM として使う ~クラウドベンチマークなどでの比較~
並行処理初心者のためのAkka入門
NetflixにおけるPresto/Spark活用事例
Javaはどのように動くのか~スライドでわかるJVMの仕組み
マルチテナントのアプリケーション実装〜実践編〜
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践

Similar to Introduction to Java 11: Support and JVM Features #jjug

PDF
JDK: 新しいリリースモデル解説(ver.2.1)
PDF
JDK: 新しいリリースモデル解説(ver.2.0)
PDF
20190202 jdk new_release_model_sendai
PDF
JDK:新しいリリースモデル解説 @ 熊本・福岡
PDF
これからのJDK/JVM 何を選ぶ?どう選ぶ?
PDF
JDK 新しいリリースモデル解説 (ver. 2.2)
PDF
Oracle jdk 20190827 - 今、あらためてOracle提供のJDKを語る
PDF
JDK:新しいリリースモデル解説 @ 岡山・広島
PDF
JDK: 新しいリリースモデル解説
PDF
Developer Festa Sapporo講演資料:Java最新動向とこれからの活用
PDF
JDK: 新しいリリースモデル解説 (ver. 2.2) @ 札幌 - 20190209
PDF
JDK:新しいリリースモデル解説 @ 富山 BuriKaigi 2019
JDK: 新しいリリースモデル解説(ver.2.1)
JDK: 新しいリリースモデル解説(ver.2.0)
20190202 jdk new_release_model_sendai
JDK:新しいリリースモデル解説 @ 熊本・福岡
これからのJDK/JVM 何を選ぶ?どう選ぶ?
JDK 新しいリリースモデル解説 (ver. 2.2)
Oracle jdk 20190827 - 今、あらためてOracle提供のJDKを語る
JDK:新しいリリースモデル解説 @ 岡山・広島
JDK: 新しいリリースモデル解説
Developer Festa Sapporo講演資料:Java最新動向とこれからの活用
JDK: 新しいリリースモデル解説 (ver. 2.2) @ 札幌 - 20190209
JDK:新しいリリースモデル解説 @ 富山 BuriKaigi 2019

More from Yuji Kubota

PDF
Head toward Java 16 (Night Seminar Edition)
PDF
Head toward Java 15 and Java 16
PDF
Head toward Java 14 and Java 15 #LINE_DM
PDF
Head toward Java 14 and Java 15
PDF
オンライン会議と音声認識
PDF
Head toward Java 13 and Java 14 #jjug
PDF
Catch up Java 12 and Java 13
PDF
Migration Guide from Java 8 to Java 11 #jjug
PDF
Java 10でぼくたちの生活はどう変わるの?
PPTX
Project Jigsaw #kanjava
PPTX
Java 9 and Future #jjug
PPTX
Secrets of Rock Star Developers (and How to Become One!) [CON7615] (Yuji KUBO...
PDF
Unified JVM Logging
PDF
Prepare for Java 9 #jjug
PDF
jcmd #javacasual
PDF
JavaOne 2016 Java SE Feedback #jjug #j1jp
PDF
OpenJDK コミュニティに参加してみよう #jjug
PDF
Garbage First Garbage Collection (G1 GC) #jjug_ccc #ccc_cd6
PDF
JavaOne 2015 JDK Update (Jigsaw) #j1jp
PDF
OpenJDK トラブルシューティング #javacasual
Head toward Java 16 (Night Seminar Edition)
Head toward Java 15 and Java 16
Head toward Java 14 and Java 15 #LINE_DM
Head toward Java 14 and Java 15
オンライン会議と音声認識
Head toward Java 13 and Java 14 #jjug
Catch up Java 12 and Java 13
Migration Guide from Java 8 to Java 11 #jjug
Java 10でぼくたちの生活はどう変わるの?
Project Jigsaw #kanjava
Java 9 and Future #jjug
Secrets of Rock Star Developers (and How to Become One!) [CON7615] (Yuji KUBO...
Unified JVM Logging
Prepare for Java 9 #jjug
jcmd #javacasual
JavaOne 2016 Java SE Feedback #jjug #j1jp
OpenJDK コミュニティに参加してみよう #jjug
Garbage First Garbage Collection (G1 GC) #jjug_ccc #ccc_cd6
JavaOne 2015 JDK Update (Jigsaw) #j1jp
OpenJDK トラブルシューティング #javacasual

Introduction to Java 11: Support and JVM Features #jjug


[8]ページ先頭

©2009-2025 Movatter.jp