0

素粒子物理学をシミュレートしていると想像してください。次に、1秒間に数回の割合で変更される各オブジェクトの位置ベクトルがあります。ベクトルが破棄されずにコピーされただけの場合、プログラムが終了するまでメモリがいっぱいになりませんか?

4

3 に答える 3

1

Javaについて話している場合、ガベージコレクションは自動的に行われ、いつでも発生する可能性があります。matrix1をmatrix2に、matrix2をmatrix3に(それぞれ2k要素)1秒間に1000回コピーするプログラムを作成しました。問題ない :)

于 2012-06-20T20:21:33.303 に答える
1

素粒子物理学をシミュレートしていると想像してください。

私が試してみます。

次に、各オブジェクトの位置ベクトルがあります

これらは、テラバイトの実験データではなく、シムごとに抽象化されたほんの一握りの素粒子であると仮定します。

それは毎秒数回の割合で変更されます。ベクトルが破棄されずにコピーされただけの場合、プログラムが終了するまでメモリを使いすぎてしまうのではないでしょうか。

これは、上記のすべてのコンテキストとは別に、かなり基本的な質問です。答えは「状況次第」です。

あなたの言語のガベージコレクションはありますか?特に(しゃれを意図していない)どの言語ですか?

履歴データが必要ですか?または、より一般的には、そもそもベクトルを破壊しない理由は何ですか?それらのすべてはまだ積極的に使用され、参照されていますか?

シムにそれらすべてが必要な場合、つまり上記の質問に対する答えは次のようになります。はい、しかしそれについてできることはあまりありません。たぶん、a)サイズが最適化された、場合によってはカスタムのデータとリストのタイプを使用し、b)実際に適用できる場合は、データの変動性に応じて、違いのみを保存できるパターンを適用します(変更されていないベクトルは、以前のバージョンなど)

実行中のシムには必要ないが、「後で」保持する必要がある場合は、IOサイクルを無駄にしないように、十分な大きさのチャンクでディスクにフラッシュします。その後、同じことが適用されます...:

それらがまったく必要ない場合は、ガベージコレクターが効果的に機能するようにするか(詳細は使用する言語によって異なります)、それらを解放するか、割り当てられたメモリを再利用するなどしてください。

これはかなり一般的な質問であり、あなたが与えている文脈はあなたを面白くしますが、実際には私たちに続けることをあまり与えません。

于 2012-06-20T20:32:55.187 に答える
-1

もちろん、リストの大きさにもよります。

位置ベクトルは、一時的で変化する可能性が高いため、素粒子物理学の不変リストカテゴリには入れません(Fermiの原理を破って修正しない限り)。

米国の州の略語のリストは、離脱運動と戦争を除いて変わらないので、より良い候補になると思います。

于 2012-06-20T20:21:14.957 に答える