フォーラム » つれづれ Java編 »
Java Magazine記事メモ
返答 (4)
Ripe for the picking: 11 essential Java features to help modernize your code - 高橋 徹 さんが3年以上前に追加
https://blogs.oracle.com/javamagazine/java-modernization-streams-records-lambdas-sealedclasses
かつて何年も前にJavaを学んだ開発者に、Javaのこの数年に導入された機能を紹介し、コードの最新化と改善に役立てる。
- Date/Timeパッケージ(Java 8で導入)
従前のDateクラス、Calendarクラスに替わり導入 - ラムダ式(Java 8で導入)
無名関数で関数型プログラミングの考え方を導入 - デフォルトメソッドとList.forEach(Java 8で導入)
インタフェースにデフォルトメソッドを導入し、変更への後方互換性をもたらした。その好例がList.forEachである。 - Streams(Java 8で導入)
データオブジェクトのフローを提供するオブジェクト。 - モジュール(Java 9で導入)
公開APIと実装を明確にする - JShell(Java 9で導入)
REPL(read-evaluate-print loop)と呼ばれる対話シェル - 単一ソースファイルの実行(Java 11で導入)
ソースファイルを先にコンパイルせずに実行 - テキストブロック(Java 13で導入)
複数行の文字列を容易に扱う。 - Records(Java 14で導入)
T.B.D. - jpackage(Java 14で導入)
T.B.D. - Sealed types(Java 15で導入)
T.B.D.
It’s time to move your applications to Java 17. Here’s why. And here’s how. - 高橋 徹 さんが3年以上前に追加
https://blogs.oracle.com/javamagazine/migrate-to-java-17
次のLTSであるJava 17への移行に関する記事。
- 開発者ローカルの環境をJava 17にアップグレードする必要がある。Docker環境であれば簡単。
- 実環境もKubernetesで制御されていれば容易。
- アプリケーションの変更はそれなりに必要。あるアプリケーションをJava 8から11へのアップグレードに数週間から数か月の作業量が見込まれる。
- 実際のところは見積以下で済んだ(見積:数週間、実績:数日)が、これは経験があったから。
- フレームワークを使用しているなら、フレームワークが新しいJavaバージョンに対応するのを待つことになる。
- 削除されたAPIがアップグレードを困難にするかも。
- バージョン間でAPIの差異をみる
https://javaalmanac.io/ - マルチリリース JARファイルが使えるかも
- IDE、ビルドツールと依存物のアップデートが必要
→ Maven Versions Plugin、Gradle Versins Pluginが依存物の例 - JAXBが削除されたので、Eclipseファウンデーションのjakartaに移行する
- JavaFXが削除されたので、GluonからOpenJFXを依存関係に含める
- JDKからフォントが削除されたので、Apache POI等を使用しているとフォントを追加する必要あり
- JMCが削除されたので、別途入手する必要あり
- Java EEモジュールが削除(JAXB、java.activation、java.xml.ws.annotation、java.transaction、java.xml.ws)
- CORBAモジュールが削除
- Nashorn削除
- Mavenプラグインの多くが クラスファイル バージョン61に未対応(JaCoCo他)
- KotlinやGradleはまだ17に未対応(2021-08中旬)
- JDK内部APIの隠蔽により、Lombok等への影響
- 総じて、JDK 8から11へのアップグレードよりも、JDK 11から17へのアップグレードの方が楽
The best HotSpot JVM options and switches for Java 11 through Java 17 - 高橋 徹 さんが3年以上前に追加
https://blogs.oracle.com/javamagazine/java-hotspot-jvm-switches-jdk11-jdk17
HotSpot JVM のオプション(Java 11~17)についての記事。
- バイトコード、JITコンパイラ(C1、C2)、GCとエルゴノミクス
-XX:PrintFlagsFinal
で設定値とgrep ergonomic
でエルゴノミクスで設定される値の確認- JDKのバージョン変遷と追加・削除されたオプション
- ヒープサイズの指定は、直接値を指定する方法と搭載RAMの割合を指定する方法がある
- アウトオブメモリ発生時の終了(ダンプ)方法のオプション3種
- GCの指定方法
- JITコンパイラのオプション
The not-so-hidden gems in Java 18:The JDK Enhancement Proposals - 高橋 徹 さんが2年以上前に追加
Java 18 (2022年3月リリース)では、9つのJEPが含まれる。そのうち5つのJEPについて言及する。
https://blogs.oracle.com/javamagazine/post/java-18-gems-jdks
Java 18の9つのJEP
- JEP 400 UTF-8デフォルト
- JEP 408 簡素なWebサーバー
- JEP 413 Java APIドキュメントのコードスニペット
- JEP 416 リフレクションをメソッドハンドルによる再実装
- JEP 417 Vecotr API(3回目のインキュベーター)
- JEP 418 インターネットアドレス解決のSPI
- JEP 419 Foreign Function and Memory API(2回目のインキュベーター)
- JEP 420 switchのパターンマッチング(2回目のプレビュー)
- JEP 421 finalizationの削除にむけた非推奨
JEP 400 UTF-8デフォルト¶
JDK 17までは、実行環境(OS)に応じてデフォルトの文字符号化が決まってましたが、JDK 18からはUTF-8がデフォルトとなります。なので、特定の環境でデフォルトとなる文字符号化に頼ったプログラムが壊れます。ちゃんと文字符号化を考えてプログラミングしましょう。
JEP 408 簡素なWebサーバー¶
コマンド jwebserverが提供されました。また、APIも用意されています。モジュール jdk.httpserver です。
JEP 413 Java APIドキュメントのコードスニペット¶
これまでは、JavaDocにコード断片を記述するときは、
タグで囲んでいました。JDK 18からは、@snippet で記載できるようになりました。 h4. JEP 416 リフレクションのメソッドハンドルをもちいた再実装 h4. インターネットアドレス解決のSPI T.B.D.