Java 9(別名JDK 1.9)は、Javaプログラミング言語開発における主要なリリースです。初期バージョンは2017年9月21日にリリースされました。Java 9リリースの主な目標は以下の通りです。 JDKとJava SEプラットフォームをモジュールベースにし、小型コンピューティングデバイスにもスケールダウン可能にする JDKとJava実装の全体的なセキュリティを向上させる Javaコードライブラリと大規模アプリケーションのビルドプロセスとメンテナンスを、Java SEとEEプラットフォームで容易にする Javaプラットフォームの標準モジュールシステムを設計・実装し、プラットフォームと
JEP 312 - スレッドローカルハンドシェイク JDK 10でJVMの新しいオプション-XX:ThreadLocalHandshakesが導入されました。このオプションはx64とSPARCベースのマシンでのみ動作します。 このオプションはVMパフォーマンス改善のために利用可能です。グローバルVMセーフポイントを作成せずにアプリケーションスレッド上でコールバックを実行できるようにします。これにより、JVMはすべてのスレッドを停止せずに個々のスレッドを停止できます。 このオプションはすべてのプラットフォームで利用できるわけではないため、他のプラットフォームは通常のセーフポイントにフォールバ
JEP 319 - ルート証明書 Java 10以前のcacertsストアは空のセットでした。さまざまなセキュリティプロトコルのベンダー証明書チェーンへの信頼を確立するために使用できる一連の証明書を含める必要がありました。 OpenJDKビルドにはこのような証明書がなかったため、TLSなどの重要なセキュリティコンポーネントがデフォルトビルドで動作しませんでした。 OracleがOracle Java SE Root CAプログラムでルート証明書をオープンソース化したことで、OpenJDKビルドにもルート証明書を含められるようになり、OpenJDKとOracle JDKの差異を縮小できます。
JEP 296 - 統合されたJDKフォレストを単一リポジトリに JDK 9では、モジュールベースの8つのディレクトリ(リポジトリ)がありました: root corba hotspot jaxp jaxws jdk langtools nashorn コードは以下のように構成されていました: $ROOT/jdk/src/java.base ... $ROOT/langtools/src/java.compiler ... Java 10以降、JDKフォレストは開発を効率化するために単一リポジトリに整理されました。コードは以下のように構成されます: $ROOT/src/java.base
JEP 316 - 代替メモリデバイスへのヒープ割り当て Java 10のこの拡張により、ユーザーはNV-DIMMなどの代替メモリデバイスをHotSpot VMに指定してJavaヒープスペースを割り当てられるようになりました。新しいオプション-XX:AllocateHeapAtでファイルシステムへのパスを渡します。 -XX:AllocateHeapAt=~/etc/heap このオプションはファイルパスを受け取り、メモリマッピングによって目的を達成します。-Xmx、-Xmsなどの他のヒープフラグも引き続き機能します。
JEP 314 - Unicode言語タグ拡張 Java 7でBCP 47言語タグのサポートが導入されましたが、このUnicodeロケール拡張はカレンダーと数値に限定されていました。Java 10では、java.util.Localeと関連クラスが更新され、LDML仕様で指定されている追加のUnicode拡張が実装されました。追加された拡張は以下の通りです。 cu - 通貨タイプ fw - 週の初日 rg - 地域オーバーライド tz - タイムゾーン 更新された主なAPI: java.text.DateFormat::get*Instance java.text.DateFormat
JEP 304 - ガベージコレクターインターフェース Java 10以前では、GC(ガベージコレクタ)の実装コンポーネントがコードベース全体に分散しており、簡単に置き換えることはできませんでした。Java 10ではガベージコレクターインターフェースが導入され、代替GC実装をプラグインできるようになりました。また、異なるガベージコレクション実装からコードベースを分離することにも役立ちます。この機能はJEP 304の一部です。 JEP 307 - G1の並列フルGC Java 9でG1(Garbage First)ガベージコレクタが導入されました。G1はフルガベージコレクションを回避しますが、
JEP 310 - アプリケーションクラスデータ共有 JVM起動時、クラスをメモリにロードする前処理ステップがあります。複数のJARに複数のクラスがある場合、最初のリクエストで明らかな遅延が発生します。サーバーレスアーキテクチャでは、このような遅延がブートタイムを遅らせ、クリティカルな操作に影響します。アプリケーションクラスデータ共有の概念は、アプリケーションの起動時間を短縮するのに役立ちます。Javaには既存のCDS(クラスデータ共有)機能がありますが、アプリケーションクラスデータ共有では、Java 10でアプリケーションクラスを共有アーカイブに格納できるようになりました。これにより、共通の
JEP 317 - 実験的JavaベースJITコンパイラ JITコンパイラはC++で書かれ、Javaをバイトコードに変換します。Java 10では、標準のJITコンパイラの代わりに実験的なJavaベースのJITコンパイラ「Graal」を使用するオプションが追加されました。GraalはJava 9で導入されたJVMCI(JVM Compiler Interface)を使用します。GraalはJava 9でも利用可能でしたが、Java 10では実験的JVMコンパイラとしてテスト・デバッグ目的でGraalを有効化できます。 有効化構文 java -XX:+UnlockExperimentalVMO
JDK 10リリースでは、Javaライブラリから複数のAPI、機能、オプションが非推奨となりました。主な内容は以下の通りです。 SNMP監視サポート非推奨 - JVMのSNMP監視・管理をサポートするjdk.snmpモジュールが非推奨となり、forRemoval=trueでマーク java.securityクラス非推奨 - java.security.{Certificate, Identity, IdentityScope, Signer}クラスが非推奨となり、forRemoval=trueでマーク javax.security.auth.Policy API削除予定 - 非推奨のjav
JDK 10リリースでは、Javaライブラリから複数の非推奨API、機能、オプションが削除されました。主な内容は以下の通りです。 未サポートのLookAndFeel削除 - NimbusまたはAqua LookAndFeelを使用しているアプリケーションは新しい構文への移行が必要 Nimbus - 既存コード javax.swing.UIManager.setLookAndFeel(com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel); Nimbus - 新しいコード UIManager.setLookAndFeel(javax.swin
JDK 10リリースではJavaライブラリに70以上の新しいAPIとオプションが追加されました。主な拡張機能は以下の通りです。 Optional.orElseThrow()メソッド java.util.Optionalクラスに新しいメソッドorElseThrow()が追加され、get()メソッドの推奨代替となりました。 不変コレクション作成API List、Set、Mapインターフェースに新しいcopyOf()メソッドが追加され、既存のコレクションから新しいインスタンスを作成できます。また、CollectorクラスにtoUnmodifiableList()、toUnmodifiableSe
JEP 286 - ローカル変数型推論 ローカル変数型推論は、Java 10から利用可能になった言語レベルで最も顕著な変更の1つです。varを使って型を指定せずに変数を定義できるようになります。コンパイラが代入される値から変数の型を推論します。この型推論はローカル変数に限定されます。 従来のローカル変数宣言 String name = Welcome to tutorialspoint.com; 新しい宣言方法(var使用) var name = Welcome to tutorialspoint.com; コンパイラは代入値を調べてname変数の型をStringと推論します。 重要な
JEP 322 - 時間ベースのリリースバージョニング Java 10以降、OracleはJavaリリースに厳格な時間ベースのリリースバージョニングモデルを導入しました。これにより、Javaは6ヶ月ごとにメジャーリリースを行います。Java 10は2018年3月にリリースされ、以降すべてのメジャーバージョンは毎年3月と9月にリリースされる予定です。リリースは大きく3つのカテゴリに分類されます。 フィーチャーリリース - 言語機能、JVM機能、新規/改良API、APIの削除/非推奨を含む。リリース時期は固定で、特定のリリースに含める機能に制約はない。開発中の機能が間に合わない場合は次のリリー
オンラインライブデモ Javaプログラミング環境をオンラインでセットアップしており、すべてのサンプルをブラウザ上でコンパイル・実行できます。読んでいる内容に自信が持て、異なるオプションでプログラムを検証できます。サンプルコードボックスの右上にある「Live Demo」オプションを自由に使って修正・実行してみてください。 public class MyFirstJavaProgram { public static void main(String[] args) { System.out.println(Hello World); } } このチュートリアル
Java 10はJavaリリースケイデンスにおける主要なリリースで、2018年3月20日にリリースされました。Java 10からOracleはJavaのリリースケイデンスを新しいモデル、すなわち6ヶ月ごとのリリースサイクルとOracle Java SE製品のLTS(Long Term Support:長期サポート)モデルに変更しました。 Java 10以降、Oracleは6ヶ月ごとに新しいJavaバージョンをリリースし、各バージョンには1〜2つの主要機能が含まれます。Oracleは「リリース列車」という概念を採用しており、各リリース列車は6ヶ月間でスケジュールされます。この期間内に開発された
Javaのコメントタイプ Java言語は3種類のコメントをサポートしています: 番号コメントと説明 1/* text */コンパイラは/*から*/までのすべてを無視します。 2//textコンパイラは//から行末までのすべてを無視します。 3/** documentation */これはドキュメンテーションコメントで、一般的にdocコメントと呼ばれます。JDK javadocツールは、自動生成ドキュメントの作成時にdocコメントを使用します。 この章ではJavadocについて説明します。Javadocを使ってJavaコードの有用なドキュメントを生成する方法を見ていきます。 Javado
アプレットとは アプレットはWebブラウザ上で実行されるJavaプログラムです。アプレットはJava API全体を利用できるため、完全に機能するJavaアプリケーションとなり得ます。 アプレットとスタンドアロンのJavaアプリケーションには、以下のような重要な違いがあります: アプレットはjava.applet.Appletクラスを継承したJavaクラスです。 アプレットではmain()メソッドは呼び出されず、アプレットクラスでmain()を定義しません。 アプレットはHTMLページ内に埋め込まれるよう設計されています。 ユーザーがアプレットを含むHTMLページを表示すると、アプレットのコ
マルチスレッドとは Javaはマルチスレッドプログラミング言語であり、複数のスレッドを持つプログラムを開発できます。マルチスレッドプログラムは、同時に実行可能な2つ以上の部分を含み、それぞれが異なるタスクを同時に処理するため、特にマルチCPU環境では利用可能なリソースを最適に活用できます。 定義上、マルチタスクとは複数のプロセスがCPUなどの共通処理リソースを共有することです。マルチスレッドはこの概念をアプリケーションレベルに拡張し、単一アプリケーション内の特定操作を個別のスレッドに細分化します。各スレッドは並列に実行可能です。OSは異なるアプリケーション間だけでなく、アプリケーション内の各
Javaメール送信の準備 Javaアプリケーションでメールを送信するには、まずJavaMail APIとJava Activation Framework (JAF)をマシンにインストールする必要があります。 JavaMailの最新版(バージョン1.2)はJavaの公式サイトからダウンロードできます。 JAFの最新版(バージョン1.1.1)も同様にJavaの公式サイトから入手可能です。 ダウンロードして解凍すると、各ディレクトリに複数のJARファイルが作成されます。mail.jarとactivation.jarをクラスパスに追加してください。 シンプルなメールの送信 ローカルマシンからシ
Java