0

ソースコードのファイル数を変更した場合(コード自体は何も変更せずに)、アプリケーションのパフォーマンスに違いはありますか?つまり、たとえば、すべてのクラスを1つのファイル(静的クラスとして新しい関係なし)に配置した場合、50ではなく、パフォーマンス上の利点(または欠点)がありますか?

ただ疑問に思う...

問題は、維持可能性についてではありません。これによりパフォーマンスが向上するかどうか(およびその理由)を知りたいだけです。

4

4 に答える 4

5

プロジェクトのビルド中、コンパイラのパフォーマンスに (無視できる程度の) 影響を与える可能性があります。実際に実行されるのはコンパイラによって生成されたクラス ファイルであるため、その後は関係ありません。

さらに興味深い質問は、クラス ファイルをディレクトリ階層に配置する場合と、クラス ファイルを JAR ファイル (これも圧縮または非圧縮の可能性があります) に配置する場合とで、実行時のパフォーマンスに違いがあるかどうかです。それらを圧縮されていない JAR ファイルに入れるとおそらく最速ですが、これは起動時間にのみ影響し、おそらくそれほど影響しません。

アプリケーションが開始されると、クラス定義はメモリに保持され、どこに格納されたかは問題になりません。

PHP (これがこの質問の由来だと思います) に関して言えば、Java は常に暗黙のうちにバイトコード キャッシュを使用します。

于 2012-06-22T10:51:26.950 に答える
2

私が理解しているように、コード内での配置方法に関係なく、すべてのクラスで個別の*.classファイルが作成されます。

したがって、結果として得られるクラス/JAR は実行時に同一になるため、パフォーマンス上の利点はコンパイル フェーズのみに制限されます。

(そして、ここでも大幅な/顕著なパフォーマンスの改善が見られる可能性は低いでしょう。確かに、コードを不自然な方法でレイアウトする価値があるものではありません。意味があり理解できるコードを記述し、コンパイラを信頼してください。賢明にバイトコードに変換してください。)

于 2012-06-22T10:51:22.423 に答える
1

「巧妙なクラスローディング」を使用すると、「ビッグクラス」は起動時にパフォーマンスに影響を及ぼします。特に、 Java Web Start(必要に応じてクラスをダウンロード、キャッシュ、ロードできる)などを使用してデプロイされている場合。

実行時の影響については、ロードされた後のパフォーマンスについては、他の人に任せます。

于 2012-06-22T10:55:11.917 に答える
1

ほとんどの場合、それは不可能であるため、この質問はかなり無意味です。2 つの public クラスを同じ .java ファイルに入れることはできません (コンパイラは文句を言います)。非パブリック クラスの場合は可能ですが、同じソース ファイルを共有するクラス用に生成されたバイトコードには影響しません。

複数のクラスを静的クラスとして囲んでいるクラスに入れると、生成されたバイトコードでのクラス名が長くなりますが、実際のクラスでのコードのパフォーマンスは変わりません。

于 2012-06-22T10:55:50.317 に答える