2009-12-17 150 views

回答

1

我覺得這個blog post由Eric Lippert是相當豐富。其中提到的一點是(簡化):內存不足異常通常與過程無法獲得足夠滿足當前需求的內存塊有關。可能有很多內存可用,但碎片太小而無法使用。

0

如果你使用的內存比你多,並且沒有釋放它......你最終會失去內存。 GC只會清除您不再參考的內容。

0

垃圾收集器的工作比在對象之後清理更復雜。 gc還必須意識到如何分配內存,確保適用於應用程序的所有不同部分的足夠大小的塊(考慮多個線程等)。

垃圾回收器還必須負責可靠地清理內存,並以不會對性能產生顯着影響的方式進行操作,並確保它在嘗試執行代碼時不會在代碼中引入更多「問題」決定什麼內存可以回收和什麼不能。

它是一個很大的工作,並且不容易或直接實施。

對於您的具體情況,OOM可能因各種原因而發生,但在相當良好行爲的應用程序中(即不分配不合理大小的對象等)通常會發生,因爲內存請求比GC合理調整可用的內存來完成它,並且GC不能足夠快地重新分散碎塊以避免失速。在這種情況下,GC不得不向應用程序報告和OOM,以防止更多請求發生積壓並確保它永遠趕不上。

相關問題