web-dev-qa-db-ja.com

sjavacとは何ですか?誰が使用し、どのように使用しますか?

OpenJDKメーリングリストでsjavacと呼ばれるツールについて some buzz がありました。また、関連する2つのJEPがあります: JEP 139:javacを拡張してビルド速度を向上させる および JEP 199:スマートJavaコンパイル、フェーズ2

私の質問は:

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

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

50
aioobe

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

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

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

ソースファイルのセットを再コンパイルするとき、javacは.Javaファイルと.classファイルのタイムスタンプを調べて、保持するものと再コンパイルするものを決定します。これは信じられないほど粗雑で、大規模なコードベースにとっては破壊的なものになる可能性があります。タイムスタンプに加えて、sjavacは依存関係のパブリックAPIを検査して、どのファイルを再コンパイルする必要があるかを判断します。

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

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

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

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

それをどのように使用しますか?

このツールはまだOpenJDKに同梱されていないため、 OpenJDK jdk9/devリポジトリ から入手する必要があります。また、ランチャーはまだ用意されていないため、Java com.Sun.tools.sjavac.Mainを使用して起動します。

55
aioobe

ここでsjavacのjdk8バックポートを試すことができます: http://sjavac.s3-website-eu-west-1.amazonaws.com/

3
user4196234