/ /なぜこのコードが原因でコンピューターのメモリが不足しないのですか? -java、windows-7、ガベージコレクション

なぜこのコードは私のコンピュータのメモリを使い果たしてしまわないのですか? - java、windows-7、ガベージコレクション

何かで遊んでいるうちに、私はこのようなものに出会いました。このコードが原因でメモリが不足することはありません。

while(true)
{
Person p=new Person();
}

ガベージコレクションが数秒ごとに実行されていない限り、(タスクマネージャでの)メモリ使用量が増えない理由を知ることができません。

Javaのガベージコレクションは頻繁に実行されますか?または、Windowsのタスクマネージャーはメモリ使用量を表示するのに良い仕事をしていませんか?

更新: Java Visual VMで監視しました。ガベージコレクターは、実行した数分後にはアクティブになりませんでした。

回答:

回答№1は6

GCは、いつ実行するか、実行する必要があるときに実行する、スコープ(ライフタイム) Person が短すぎるため、GCはEden空間にある間にそれをスイープし、古い世代に昇格することさえしません。


回答№2の場合は1

Javaのガベージコレクションは基本的に実行されます必要に応じて。ヒープがいっぱいになると、GCが発生します。 「割り当てない」場合、GCは実行されません。割り当てる以外に何もしない場合、GCは非常に頻繁に実行されます。さらに重要なのは、GCを最初に実行しようとしない限り、JavaはOutOfMemoryErrorを実行しないということです。

JITは、場合によっては、オブジェクトが明らかに範囲外になった場合やローカルでのみ必要な場合を認識し、その場合はGCをまったく必要とせずにスタックを割り当てることができます。


回答№3の場合は0

各ループで、オブジェクトを作成して破棄しますそれ。ガベージは、必要なときにのみメモリを解放します。メモリエラーのみを発生させたい場合は、whileおよびwhileからArrayListを作成し、ArrayListに人を追加する必要があります。