Adopt Open JDK公式文書(十)
7624 ワード
コンパイルプロセス性能最適化コマンドラインパラメータ
AdoptOpenJDK wikiのリンクは、コンパイルプロセスの性能を向上させるためのいくつかの例を提供します。
jcovをコンパイルする
プロジェクトトップページ(プロジェクト情報、コンパイルガイド、その他…)
https://wiki.openjdk.java.net/display/CodeTools/jcov
ソースコード:
http://hg.openjdk.java.net/code-tools/jcov
Adopt OpenJDKから継続的に統合サイトをダウンロードします。
クイックコンパイルガイド
プロジェクトのホームページにコンパイルガイドがある場合は、プロジェクトのホームページを参照してください。また、上のコンパイル指導は削除されます。重複しないようにしてください。
OpenJDKコードのカバー率を参照してください。
コンパイルsigtest
プロジェクトのホームページ(プロジェクト情報、コンパイルガイド、その他…)
https://wiki.openjdk.java.net/display/CodeTools/sigtest
ソースコード:
http://hg.openjdk.java.net/code-tools/sigtest
クイックコンパイルガイド
OpenJDKコードの被覆率
Adopt OpenJDKのコードカバー率ガイドcode-coverage.
既存コードテストカバー率報告(OpenJDK 8とOpenJDK 9)
私たちは最近、Adopt OpenJDKクラスタ上で動作するOpenJDK 8とOpenJDK 9の統合を継続するためにコードテストのカバー率報告を増加しました。OpenJDK 8とOpenJDK 9は自動的に「jcovレポート」をリリースします。
OpenJDK 9のコードテストのカバー率テストを実行します。
ヒント: と同様のステップは、’OpenJDK 8’ にも適用される。これらのステップは、「jdk」を生成するためのテストカバレッジ報告 のみに使用される。私たちは'lagtools'を成功的に生成することができませんでした。 最新の インストール これらのexportをあなたの は debugモード実行テスト
いったん終了したら、次のような経路に入ってレポートを調べます。
jcovのコンパイルを参照してください。
ホットスポットに踏み込んだもの
hotspotソースディレクトリのGCオプション
./hotspot/src/share/vm/gcimplementation/g 1/g 1 globals.hpp
./hotspot/src/share/vm/runtime/globals.hpp
HotSpot命令行オプション–PrintAsssemble
HotSpotコードセグメント–異なるGCオプションによる各種ブランチ選択
GCタイプ
年代が古い
年代が古い
SerialGC(-XX:+UseSerialGC)
シリアル
シリアル
ParalGC(-XX:+UseParalelGC)
並行
シリアル
Paralel Comppacting(-XX:+UseParalOldGC)
並行
並行
Concerent Mark Sweep GC(-XX:+UseConcMark SweepGC)
並行
同時-マーク-クリア
参照
から来ました。/hotspot/src/share/vm/memory/univers.cppのコードセグメントです。
OptViewerツールは、このメールを参考にしてください。
java.cを修正して、Eclipseを使ってhotspotを実行します。
「オプションですが、面白い挑戦」はこれらのマニュアルを参照してください。
java.cを修正して、命令行を使ってhotspotを実行します。
「オプションですが、面白い挑戦です」
java.cを修正してEclipseで実行するというチャレンジと似ていますが、コマンドラインと簡単なエディタを使ってこのチャレンジを完成させる必要があります。
お楽しみに Nashornのいいものです。 Lambada階段 OpenJDK(JDK)コードテストカバーツール(2つ) OpenJDK build warnings tool(which are currently suppresed in the build process)… OpenJDKコンパイル警告ツール(現在コンパイル中に禁止されています) ジットWatchを使ってHotSpot JVM JITコンパイルプロセスを観察する JVMで動作するSmalltalk JVM上のLisp を実行します。
Hotspot JVMタスク:付加タスク(中級と高級)は、Java.cにdebugレベルのlog情報を追加し、gammaを再コンパイルし、例示的なプログラムを実行するか、または他のjavaベースのプログラムを実行する。 再構成されたjava.csは、debugレベルのLogを挿入し、gammaを再コンパイルし、例示的なプログラムまたは他のjavaベースのプログラムを実行します。 以上の二段階を完了したら、低遅延、GC調優したjavaプログラムをロードし、gc logsを開いて、gc logsを確認して、性能に変化があるかどうかを確認します。 はjavacで実現されますか?演算子(Javacをどのように修正するかを学ぶ良い方法)は、Javaプログラムをコンパイルします。 はGCの楽しみを体得します:カスタムのごみ収集器を使って既存のものを換えます。コードライブラリのPermGenまたはiCMSを再活性化します。HotSpotのバージョンに任意の修正を追加します。 によって、javacを修正して、彼に新しい言語特性を解析してコンパイルすることができます。あるいはJVMに基づく他の方言、さらに古いプログラム言語、例えばC、アセンブリ、SchmeまたはSmalltalk を互換できるようにします。は、内蔵されているキャリアをカスタムキャリアで置換する。
AdoptOpenJDK wikiのリンクは、コンパイルプロセスの性能を向上させるためのいくつかの例を提供します。
jcovをコンパイルする
プロジェクトトップページ(プロジェクト情報、コンパイルガイド、その他…)
https://wiki.openjdk.java.net/display/CodeTools/jcov
ソースコード:
http://hg.openjdk.java.net/code-tools/jcov
Adopt OpenJDKから継続的に統合サイトをダウンロードします。
クイックコンパイルガイド
$ hg clone http://hg.openjdk.java.net/code-tools/jcov
$ cd jcov/build
$ ant clean
$ ant -v -f build.xml -Dasmjar5=/path/to/asm-all-5.0.1.jar -Djavatestjar=/path/to/javatest.jar
asm
は、http://download.forge.ow2.org/asm/asm-5.0.1-bin.zipダウンロードjtharness
は、https://adopt-openjdk.ci.cloudbees.com/job/jtharness/lastSuccessfulBuild/artifact/ダウンロードプロジェクトのホームページにコンパイルガイドがある場合は、プロジェクトのホームページを参照してください。また、上のコンパイル指導は削除されます。重複しないようにしてください。
OpenJDKコードのカバー率を参照してください。
コンパイルsigtest
プロジェクトのホームページ(プロジェクト情報、コンパイルガイド、その他…)
https://wiki.openjdk.java.net/display/CodeTools/sigtest
ソースコード:
http://hg.openjdk.java.net/code-tools/sigtest
クイックコンパイルガイド
$ svn checkout https://svn.java.net/svn/sigtest~svn/trunk
$ cd code/build
$ ant build -Djdk5.home=/path/to/jdk1.5.latest \
-Djdk8.home=/path/to/jdk8.latest \
-Dmvn2.exe=/path/to/latest/bin/mvn
プロジェクトのホームページにコンパイルガイドがある場合は、プロジェクトのホームページを参照してください。また、上のコンパイル指導は削除されます。重複しないようにしてください。OpenJDKコードの被覆率
Adopt OpenJDKのコードカバー率ガイドcode-coverage.
既存コードテストカバー率報告(OpenJDK 8とOpenJDK 9)
私たちは最近、Adopt OpenJDKクラスタ上で動作するOpenJDK 8とOpenJDK 9の統合を継続するためにコードテストのカバー率報告を増加しました。OpenJDK 8とOpenJDK 9は自動的に「jcovレポート」をリリースします。
OpenJDK 9のコードテストのカバー率テストを実行します。
ヒント:
jdk
映像はOpenJDK9
で作成ディレクトリをコンパイルすることを保証します。jtreg with the jcov
、JTRegの使用を参照してください。.bash_xxx
プロファイルに追加します。export SOURCE_CODE=/home//workspace/jdk9/
export JTREG_INSTALL=/home//workspace/jtreg
export JT_HOME=$JTREG_INSTALL
export JTREG_HOME=$JTREG_INSTALL
export PRODUCT_HOME=$SOURCE_CODE/build/linux-x86_64-normal-server-release/images/jdk
export JPRT_JTREG_HOME=${JT_HOME}
export JPRT_JAVA_HOME=${PRODUCT_HOME}
export JTREG_TIMEOUT_FACTOR=5
export CONCURRENCY=8
$ cd $SOURCES/jdk9/jdk/test
Makefile
ファイルを編集し、# Make sure jtreg exists
行前に下りのように増加しました。jdkroot=
JTREG_TEST_OPTIONS += -jcov/classes:$(jdkroot)/build/linux-x86_64-normal-server-release/jdk/modules/java.base
JTREG_TEST_OPTIONS += -jcov/source:$(jdkroot)/jdk/src/java.base/share/classes
JTREG_TEST_OPTIONS += -jcov/include:*
$ cd ..
$ make test LOG=debug
生成したテストカバレッジの報告を開くいったん終了したら、次のような経路に入ってレポートを調べます。
$ cd $SOURCES/jdk9/build/linux-x86_64-normal-server-release/testoutput/jdk_core/JTreport/jcov/
$ open index.html
これは何時間かかりますか?具体的な時間はシステムの性能と利用可能な資源によって決まります。jcovのコンパイルを参照してください。
ホットスポットに踏み込んだもの
hotspotソースディレクトリのGCオプション
./hotspot/src/share/vm/gcimplementation/g 1/g 1 globals.hpp
./hotspot/src/share/vm/runtime/globals.hpp
HotSpot命令行オプション–PrintAsssemble
HotSpotコードセグメント–異なるGCオプションによる各種ブランチ選択
GCタイプ
年代が古い
年代が古い
SerialGC(-XX:+UseSerialGC)
シリアル
シリアル
ParalGC(-XX:+UseParalelGC)
並行
シリアル
Paralel Comppacting(-XX:+UseParalOldGC)
並行
並行
Concerent Mark Sweep GC(-XX:+UseConcMark SweepGC)
並行
同時-マーク-クリア
参照
から来ました。/hotspot/src/share/vm/memory/univers.cppのコードセグメントです。
Universe::initialize_heap()
if (UseParallelGC) {
#ifndef SERIALGC
Universe::_collectedHeap = new ParallelScavengeHeap();
#else // SERIALGC
fatal("UseParallelGC not supported in this VM.");
#endif // SERIALGC
} else if (UseG1GC) {
#ifndef SERIALGC
G1CollectorPolicy* g1p = new G1CollectorPolicy();
G1CollectedHeap* g1h = new G1CollectedHeap(g1p);
Universe::_collectedHeap = g1h;
#else // SERIALGC
fatal("UseG1GC not supported in java kernel vm.");
#endif // SERIALGC
} else {
GenCollectorPolicy* gc_policy;
if (UseSerialGC) {
gc_policy = new MarkSweepPolicy();
} else if (UseConcMarkSweepGC) {
#ifndef SERIALGC
if (UseAdaptiveSizePolicy) {
gc_policy = new ASConcurrentMarkSweepPolicy();
} else {
gc_policy = new ConcurrentMarkSweepPolicy();
}
#else // SERIALGC
fatal("UseConcMarkSweepGC not supported in this VM.");
#endif // SERIALGC
} else { // default old generation
gc_policy = new MarkSweepPolicy();
}
Universe::_collectedHeap = new GenCollectedHeap(gc_policy);
}
シリアルGCを開きます。シリアルGCのみのプラットフォームですか?
.
.
Universe::initialize_heap()
if (UseParallelGC) {
fatal("UseParallelGC not supported in this VM.");
} else if (UseG1GC) {
fatal("UseG1GC not supported in java kernel vm.");
} else {
GenCollectorPolicy* gc_policy;
if (UseSerialGC) {
gc_policy = new MarkSweepPolicy();
} else if (UseConcMarkSweepGC) {
fatal("UseConcMarkSweepGC not supported in this VM.");
} else { // default old generation
gc_policy = new MarkSweepPolicy();
}
Universe::_collectedHeap = new GenCollectedHeap(gc_policy);
}
.
.
.
シリアルGCをオフにします。パラレルとシリアルの2つのGC方式をサポートするプラットフォームですか?
.
.
Universe::initialize_heap()
if (UseParallelGC) {
Universe::_collectedHeap = new ParallelScavengeHeap();
} else if (UseG1GC) {
G1CollectorPolicy* g1p = new G1CollectorPolicy();
G1CollectedHeap* g1h = new G1CollectedHeap(g1p);
Universe::_collectedHeap = g1h;
} else {
GenCollectorPolicy* gc_policy;
if (UseSerialGC) {
gc_policy = new MarkSweepPolicy();
} else if (UseConcMarkSweepGC) {
if (UseAdaptiveSizePolicy) {
gc_policy = new ASConcurrentMarkSweepPolicy();
} else {
gc_policy = new ConcurrentMarkSweepPolicy();
}
} else { // default old generation
gc_policy = new MarkSweepPolicy();
}
Universe::_collectedHeap = new GenCollectedHeap(gc_policy);
}
.
コンパイラ関連OptViewerツールは、このメールを参考にしてください。
java.cを修正して、Eclipseを使ってhotspotを実行します。
「オプションですが、面白い挑戦」はこれらのマニュアルを参照してください。
java.cを修正して、命令行を使ってhotspotを実行します。
「オプションですが、面白い挑戦です」
java.cを修正してEclipseで実行するというチャレンジと似ていますが、コマンドラインと簡単なエディタを使ってこのチャレンジを完成させる必要があります。
お楽しみに
Hotspot JVMタスク:付加タスク(中級と高級)