web-dev-qa-db-ja.com

Javaビルド速度のボトルネックは何ですか?

一般的なJavaプロジェクト(たとえば、数十のクラスと依存関係))のビルド速度に最も影響を与える基本的なシステムパラメータはどれですか。

JIT(バイトコードからCPUへの命令)コンパイラの最適化に関する情報はたくさんありますが、大規模なプロジェクトを(非常に)高速にコンパイルする必要がある場合はどうでしょうか。 10倍高速ですか? 100倍速い?

3
J. Doe

すべての「Xをより速くするにはどうすればよいですか」という質問と同様に、最初のアプローチはプロセスをプロファイルすることです。 IMEの最大のボトルネックは通常、ディスク速度です。 SSDがユビキタスになると、これは少しシフトする可能性があります(リモートマシンで読み取り/書き込みを行っている場合、ネットワーク速度が問題になる可能性があります。メモリの負荷により、使用できる並列処理の量が制限される可能性があります)。他に何もない場合は、最初の概算として、CPU、ディスク、ネットワーク、メモリの使用状況を表示するある種のシステムモニターを起動し、ビルドを開始します。これはあなたにいくつかのアイデアを与えるはずです。

3
TMN

通常、このような高速化は、プロジェクトをモジュールに分割して、個別にコンパイルすることによってのみ達成できます。

しかし、「コア」、「モデル」、「UI」などの一般的なモジュールはこれに適していないため、保守性と開発速度を低下させない方法でこれを行うと、再構築と再構築が必要になることがよくあります一種のコンパイル。

したがって、「水平スライス」の代わりに「垂直スライス」が必要です。他の機能とは別にコンパイルできる、特定の機能のすべてのロジックを含むモジュール。または、プラグインを個別にコンパイルできる、ある種のプラグインシステム。しかし、それはそれらのプラグインが使用するための安定した堅実なAPIの作成を必要とします。

個別のモジュールを作成するまで行きたくない場合は、再コンパイルして並列コンパイルの容量を増やすことをお勧めします。私が見たほとんどのプロジェクトには、本当に「背の高い」モジュールの依存関係ツリーがありました。代わりに、「浅い」および「広い」依存関係ツリーに努める必要があります。並列にコンパイルできるモジュールの量を最大化します。

1
Euphoric