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から継続的に統合サイトをダウンロードします。
 
クイックコンパイルガイド
$ 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のコードテストのカバー率テストを実行します。
    ヒント:
  • と同様のステップは、’OpenJDK 8’
  • にも適用される。
  • これらのステップは、「jdk」を生成するためのテストカバレッジ報告
  • のみに使用される。
  • 私たちは'lagtools'を成功的に生成することができませんでした。
  • 最新のjdk映像はOpenJDK9で作成ディレクトリをコンパイルすることを保証します。
  • インストールjtreg with the jcov、JTRegの使用を参照してください。
  • これらのexportをあなたの.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:*
  • debugモード実行テスト
    $ 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で実行するというチャレンジと似ていますが、コマンドラインと簡単なエディタを使ってこのチャレンジを完成させる必要があります。
    お楽しみに
  • 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
  • を互換できるようにします。
  • は、内蔵されているキャリアをカスタムキャリアで置換する。