2.6. JPMS


OpenJDK 9 で導入された Java Platform Module System (JPMS) は、非公開 API へのアクセスを制限または防止します。JPMS は、Java アプリケーションの起動およびコンパイル方法 (クラスパスを使用するか、モジュールパスを使用するかなど) にも影響します。

内部モジュール

デフォルトでは、Red Hat build of OpenJDK 11 は JDK 内部モジュールへのアクセスに制限はありますが、アクセスできます。つまり、ほとんどのアプリケーションは変更なしに作業を継続できますが、これらのアプリケーションは警告を出力します。この制限を回避するには、java コマンドに ‑‑add-opens <module-name>/<package-in-module>=ALL-UNNAMED オプションを渡すことで、アプリケーションが内部パッケージにアクセスできるようにします。

以下に例を示します。

Copy to Clipboard Toggle word wrap
--add-opens java.base/jdk.internal.math=ALL-UNNAMED

さらに、--illegal-access=warn オプションを java コマンドに渡すことで、不正アクセスのケースを確認できます。このオプションは、Red Hat build of OpenJDK のデフォルトの動作を変更します。

ClassLoader

JPMS リファクターリングにより、Red Hat build of OpenJDK 11 の ClassLoader 階層が変更されます。

Red Hat build of OpenJDK 11 では、システムクラスローダーが URLClassLoader のインスタンスではなくなりました。Red Hat build of OpenJDK 11 で ClassLoader::getSystemClassLoader を呼び出してその結果を URLClassLoader にキャストする既存のアプリケーションコードでは、ランタイム例外が発生します。

Red Hat build of OpenJDK 8 では、クラスローダーを作成するときに、このクラスローダーインスタンスの親として null を渡すことができます。ただし、Red Hat build of OpenJDK 11 では、クラスローダーの親として null を渡すアプリケーションにより、クラスローダーがプラットフォームクラスを見つけられなくなる可能性があります。

Red Hat build of OpenJDK 11 には、特定のクラスのロードを制御できる新しいクラスローダーが含まれています。これにより、クラスローダーが必要なすべてのクラスを見つける方法が改善されます。Red Hat build of OpenJDK 11 では、クラスローダーインスタンスを作成するときに、ClassLoader.getPlatformClassLoader() API を使用してプラットフォームクラスローダーを親として設定できます。

関連情報

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat, Inc.