2012-03-24 8 views
2

私はこれが可能ではないと推測しています...しかし、ここに行く。私の理解は、エデンのスペースは、特にジェネレーションスペースよりも収集する方が安いことです。大きなヒープは、長時間実行しているアプリケーション(サーバーアプリケーション)とサーバーアプリケーションを思い付く傾向があります。多くの場合、ある種のキャッシュを使用したいと考えています。いくつかの種類のエビクション(LRU)を持つキャッシュは、GCが作成するいくつかの前提を無効にする傾向があります(一時オブジェクトはすぐに消滅します)。だから、キャッシュの追い出しはあなたが望むより速く古い世代をいっぱいにしてしまい、あなたはより高価な古い世代のコレクションになります。JVM GCはオブジェクトをエデン空間に降格しますか?

Javaがリファレンスをマークする方法(キーワードを削除する)を提供していれば、このようなことは避けられますか?これとC++の違いは、使用がオプションであることです。 deleteを呼び出すと、実際にオブジェクトが削除されるのではなく、オブジェクトがオブジェクトをEden空間に降格させる必要があるGCのヒントになります(より簡単に収集されます)。私はこの機能が存在しないと推測していますが、なぜそうではありませんか(それは悪い考えです)?

+0

+1 GCのような質問。彼らは難しい。 –

答えて

1

実際には、エデンスペースは、オブジェクトが新たに作成されるメモリのゾーンです。オブジェクトがエデン空間を離れると、再びそこに配置することはできません。その後、JavaのGC実装は非常に不透明であるため、通常はあまりおこないません。

いずれにしてもいくつかの制約が解除されます。エデンスペースは、短い寿命を持つアイテムの削除に注意を払ってガベージコレクションされます。オブジェクトが十分な時間を生き延びたら、別の場所に移動しなければならない場合は、Java自体では決してできないものであるGC自体によって課されたルールに反するようになります。

+0

私は同意しますが、それを別のものと呼んでいます。おそらく死んでいるオブジェクト参照専用の煉獄空間を作る。オブジェクト参照を古いgenから移動すると、古いgenのサイズが縮小され、簡単に収集できる比較的小さな領域が作成されます。古い世代が20GBなどと言われている場合は、完全なGCを避けることは少し面倒です! – Kevin

関連する問題