2012-07-06 48 views
0

一旦拋出異常,是否導致拋出內存不足的對象?它是否立即發生?java.lang.OutOfMemoryError,何時回收內存?

換句話說,如果我將對象添加到列表中,在某些時候,這不會再發生,並且會引發OOM錯誤。那個時候,列表本身發生了什麼?

java.lang.OutOfMemoryError: Java heap space 
+0

這是**錯誤**(不可恢復)。 – adatapost 2012-07-06 02:21:41

回答

1

當無法創建新對象時會引發這種情況。當前對象將繼續存在。

但是,由於這樣的錯誤的性質,當前的代碼將停止執​​行,很可能很快就會對當前對象進行垃圾回收。它僅取決於代碼的結構以及引用是否仍然保留在對象中。

0

documentation

時,因爲它超出了內存,並且可以通過垃圾收集器提供任何更多的內存,Java虛擬機無法分配一個對象時拋出。

+0

對。內存回收的時間是什麼時候?它是否立即發生? – JAM 2012-07-06 02:24:37

+0

這可能是有用的:http://stackoverflow.com/questions/3058198/can-the-jvm-recover-from-an-outofmemoryerror-without-a-restart – Jack 2012-07-06 02:24:53

+1

不能保證JVM實際上能夠回收在所有的記憶。 – Jack 2012-07-06 02:25:45

0

根據http://docs.oracle.com/javase/6/docs/api/,OutOfMemoryError錯誤是:當Java虛擬機無法分配一個對象,因爲 它是內存不足

拋出,並且可以由 垃圾進行沒有可用的內存集電極。

因此,只要JVM發現它沒有足夠的heap空間爲您嘗試創建的新對象分配內存,就會發生這種情況。所以對象永遠不會被創建,因爲你沒有足夠的內存。