これを検索しましたが、これに対する直接的な答えが見つからないようです。
基本的に、配列のコピーを作成するコードがいくつかあり( Arrays.copyOf
create を使用int[]
)、いくつかの作業を行い、結果を出力するかArrays.copyOf
、さらに処理するためにキューに送信します。
私の結果のコピーを変更すると、もはや正しくないので必要だと思いますが、私のメモリプロファイリングによると、すべてのメモリとガベージコレクションが役立つため、完了後に何かできるかどうか疑問に思っていますが、それは再び構築されます。これが役立つかどうかは本当にわかりませんが、プログラムをint[]
キューに送信した後に何らかの形で削除した場合、プログラムがより小さなメモリフットプリントで機能するかどうかをテストしたかったのです。
私はJavaが初めてなので、このロジックに完全に欠陥がある場合、同じ結果を達成する別の方法はありますか? 要点は、新しい配列を作成していて、少し使用されていますが、不要になったときに残ります(最大メモリの15Gが必要です。ガベージコレクタが入ってそれを減らしていると思いますが、数分以内に最大値に戻ります)秒)。たぶん、変数をnullまたは何かに設定することはできますか?
ここに私が何を意味するかを示すためのいくつかのコードがあります(その種類はくだらないですが、コードでのセットアップ方法を理解できることを願っています。これはすべてマルチスレッド呼び出し可能オブジェクト内にあります):
while(!queue.isEmpty()) {
int[] data_list = Arrays.copyOf(current.list, current.list.length);
if (things work) {
Sysout("print results");
} else if (current.k > 0) {
queue.add(new Queue(data_list));
}
}
}