OracleドキュメントでCDSについて読みます https://docs.Oracle.com/javase/8/docs/technotes/guides/vm/class-data-sharing.html
私が理解したのは、jvmのロードに必要なシステムクラスファイルが解析され、検証されて、jre/lib/[Arch] /client/classes.jsaにあるアーカイブに格納されていることです。さらに、jvmのメモリマッピングも提供しているため、jvmはアーカイブで指定されたマッピング情報に従ってメモリを直接マップします。したがって、これにより、jvmインスタンスが起動するたびにクラスをロードするオーバーヘッドが減少します。間違っていたら訂正してください。
Java 10に来ると、アプリケーションコードでこれをどのように実現できますか?次に、完全なアプリケーションコードがCDSの対象になるか、またはいくつかの制限がありますか?
アプリケーションクラスデータを使用してアーカイブを作成および使用するには、3つの重要な手順があります(詳細については、 アプリケーションクラスデータの共有に関する私の投稿 を参照してください)。
アーカイブに含めるクラスのリストを作成します。
_Java -XX:+UseAppCDS
-XX:DumpLoadedClassList=classes.lst
-jar app.jar
_
アーカイブを作成する:
_Java -XX:+UseAppCDS -Xshare:dump
-XX:SharedClassListFile=classes.lst
-XX:SharedArchiveFile=app-cds.jsa
--class-path app.jar
_
アーカイブの使用:
_Java -XX:+UseAppCDS -Xshare:on
-XX:SharedArchiveFile=app-cds.jsa
-jar app.jar
_
次の点に注意してください。
-Xlog:class+load
_( _-Xlog
_ の詳細)を使用して詳細情報を取得します[〜#〜] jep [〜#〜] のAppCDSの例では、アプリケーションクラスを共有アーカイブに追加する方法を示しています。制限に関しては、いくつかあります:
CDS/AppCDSを使用する際に注意すべきその他の実用的な考慮事項があります。
CDSとAppCDSに関するもう1つの素敵で詳細な記事は https://simonis.github.io/cl4cds/ です。
この記事の著者は、カスタムクラスローダーによってアプリケーションクラスがロードされた場合でもアプリケーションクラスを共有できるようにする tool も作成しています。
CDSの使用に興味がある場合は、この機能を長期間備え、より成熟した完全なOpenJ9 JVMを試すこともできます。詳しくは こちら をご覧ください。