3

効率を証明するために、自分が作成したJavaプログラムをテストしようとしています。実行するさまざまなテストがあり、実行時分析を正確にしようとしています。問題は、さまざまなテストが一般的なディスク上の情報にアクセスする可能性があることです。したがって、実験結果を「公平」にするために、実験の合間に、Javaプログラムで使用されている内部メモリをプログラムでクリアしたいと思います。つまり、各実験で同じ「空のメモリ/キャッシュ」を使用する必要があります。

実験の合間に大きなファイルを読んでみました。また、マシンを再起動してみました。興味深いことに、大きなファイルを読み込んだ後、単にマシンを再起動した場合(たとえば、40秒から5秒)、時間が大幅に悪化します。各実験の間にマシンを再起動する以外に、内部メモリをクリアする(つまり、一般的なディスクアクセスからの実験の人為的な高速化を回避する)正しい方法は何ですか?これは実行不可能です。

4

1 に答える 1

0

内部メモリをクリアする正しい方法は何ですか

コンピューターを再起動します。あなたが言うように、これは最も遅いオプションではないかもしれません。

コンピューターは可能な限り効率的になるように設計されており、意図的に非効率にするということは、どの程度非効率にしたいのかを推測することを意味するため、これを行う標準的な方法はありません。

書き込んだファイルのキャッシュをクリアする1つの方法は、それらを削除することです。保持したいディスク内のファイルのキャッシュをクリアしたい場合は、メインメモリよりも大きいファイルの大きなセットを書き込んで削除することができます。

Windowsを使用している場合は、どのような場合でもファイルをキャッシュするためにすべてのメモリを使用するわけではありません。あなたができることは、これにかかる時間と時間に数百MBの大きなファイルを書くことです。キャッシュが使い果たされると、Javaからの時間が突然急増し、この時点でおそらくキャッシュがクリアされていることがわかります。これが発生した後、それらを削除すると、結果としてキャッシュが空になる可能性があります。

これは再現性のある結果を得るのに役立ちますが、これは再起動とまったく同じではない場合があります。注:アプリケーションを実行するたびにコンピューターを再起動する予定がない限り、再起動後の時間は意味がない場合があります。

ところで:あなたがOSで心配する必要があるディスクキャッシュ。Javaは、作成したバッファーと作成したコードを除いてファイルをキャッシュしないため、これらはユーザーの管理下にある必要があります。

于 2012-11-04T10:35:44.200 に答える