2019年6月1日にFGNエンジニアMeetup vol.1で登壇した資料です
Javaは今でも無償ですという話2019/6/1 FGNエンジニアMeetup vol.1きしだ なおき
View Slide
自己紹介• きしだ なおき• LINE Fukuoka• @kis
Javaのダウンロード• 「個人的な使用や開発目的での使用など、特定の使用が無償で許可されますが、以前のOracle Javaライセンスの下で認可されたその他の使用はできなくなりました」
無償で商用利用ができない?
Javaはオープンソース• Javaはクラスパス例外付GPLで開発されている
Javaの開発体制• JavaはOpenJDKとして複数の会社や個人が開発に参加している• Javaはさまざまな会社や団体がバイナリを提供しているOpenJDKOracleRed HatSAPGoogleなどOracleAmazonRed HatAzul開発Oracle JDKOracle OpenJDKAmazon CorrettoRed Hat OpenJDKZuluAdoptOpenJDK AdoptOpenJDKバイナリ
Javaのリリースサイクル• 半年に一回3月と9月に新バージョンをリリース• 最新バージョンは3月にリリースされたJava 12• Java 13が開発中で9月にリリース予定• Oracle OpenJDK以外のディストリビューションは3年ごとにLTS(Long Term Support)を設定• Java 11がLTS• 次のLTSはJava 17
どのディストリビューションを使えばいいの?• OSやクラウド、Appサーバーで提供されているものがあればそれ• Red Hat Enterprise LinuxやCentOS• Red Hat OpenJDK• Microsoft Azure• Azul Zulu• AWS(Amazon Linux)• Amazon Corretto(予定)• こだわりがなければAdoptOpenJDK• https://adoptopenjdk.net/• 個人の環境はOracle OpenJDKの最新版• http://jdk.java.net/
OracleのJDKを無償で本番で使いたいんだ!• GraalVMというのがあります• https://www.graalvm.org/• Oracle Labが開発、提供• Java 8ベース• GraalVM CEは無償で利用できる• GraalVM EEは有償• 性能が高め
GraalVM• Javaで書かれたJITコンパイラ”Graal”をベースにしたJVM• GraalはJava 10にもExperimentalとして搭載されている• 現在のC2コンパイラはCで書かれていてメンテナンス困難• GraalをAOTコンパイラとして利用してJavaをネイティブイメージ化できる
GraalVM native-image• Javaの起動速度が高速化• Javaのメモリ使用量を削減https://medium.com/graalvm/lightweight-cloud-native-java-applications-35d56bc45673
最近のJava Webフレームワーク• Helidon by Oracle• https://helidon.io/• Micronaut by Object Computing• https://micronaut.io/• Quarkus by Red Hat• https://quarkus.io/• 起動速度やメモリフットプリントを削減• GraalVM Native Imageに対応
ついでにJavaの最近の言語拡張• var(JDK10)• switch式(JDK 12, 13, preview)• Text Block(JDK 13, preview)• パターンマッチング• record
var• ローカル変数型推論• var list = new ArrayList();
switch式• switch文が式にvar s = switch (n) {case 1, 2 -> "Hello";case 3 -> "World";default -> "!!!";}
Text Blocks• 複数行テキストString html = """Hello, world""";
パターンマッチング• パターンマッチングが来る!if (o instanceof String s) {System.out.println(s.trim());}
record型• 構造体のようなものが• record Point(int x, int y) {}• パターンマッチも対応予定if (p instanceof Point(var x, var y)) {System.out.printf("x:%d y:%d", x, y);}
まとめ• Javaは今でも無償です