52

OpenJDK メーリング リストで呼び出されたツールについて話題になっています。sjavacまた、関連する 2 つのJEP があります。JEP 139: Enhance javac to Improvement Build SpeedJEP 199: Smart Java Compilation, Phase Twoです。

私の質問は次のとおりです。

  • sjavacツールとは正確には何ですか?
  • 誰を対象としていますか?
  • どうやって使うの?

免責事項:自問自答。このツールの知識を StackOverflow コミュニティにもたらし、将来の sjavac FAQ への参照を作成したかっただけです。

4

1 に答える 1

57

sjavac ツールとは正確には何ですか?

このsjavacツールは、Oracle で開発され、次の機能を提供することを目的とした の (スマートな) ラッパーです。javac

  • インクリメンタル コンパイル- 必要なものだけを再コンパイルする
  • 並列コンパイル- コンパイル中に複数のコアを利用
  • コンパイラをホット VM に保持する- JIT された javac インスタンスを連続呼び出しに再利用する

一連のソース ファイルを再コンパイルするとき、javac は .java および .class ファイルのタイムスタンプを調べて、何を保持し、何を再コンパイルするかを決定します。これは非常に粗雑で、大規模なコード ベースでは壊滅的です。タイムスタンプに加えて、sjavac は依存関係のパブリック API を調べて、再コンパイルが必要なファイルを判断します。

Sjavac はまた、コンパイルを javac の複数の呼び出しに分割しようとします。つまり、ビルド プロセスに高レベルの並列性をもたらします。

最後に、sjavac ツールはクライアント部分とサーバー部分に分割されています。これにより、sjavac をバックグラウンドで実行したままにして、JIT を実行し、連続した呼び出しで使用できるようにすることができます。

誰を対象としていますか?

大規模なプロジェクトに取り組んでいて、開発中にコード ベースを頻繁に再コンパイルする人は、試してみることをお勧めしsjavacます。(ただし、このツールは現在開発中であり、まだ未解決の問題があることに注意してください。)

どうやって使うの?

このツールはまだ OpenJDK に同梱されていないため、OpenJDK jdk9/dev リポジトリから入手する必要があります。また、ランチャーはまだ配置されていないため、 で呼び出しますjava com.sun.tools.sjavac.Main

于 2014-10-17T12:11:14.817 に答える