2013-12-14 45 views
1

我只是想知道如果我以下列方式创建/删除对象,GC能够处理它吗?您可以创建比JVM GC可以处理的对象更快的对象吗?因此OOM发生?

  1. 创建数百万个对象。
  2. 等5分钟。
  3. 删除对象
  4. 创建他们马上删除后(不等待/延迟)

我觉得,因为它运行在GC的CPU占用率会上升,但有可能的是,GC不会能抓住它试图回收堆?

+0

我不知道是否有在JLS,禁止任何东西,但我怀疑它会发生在大多数JVM。如果需要,分配将启动一个GC,然后等待它完成。 – yshavit

+0

如果你有很多终结者(或者他们运行的很慢),你实际上可以'超越'GC。定稿队列基本上太长了。 – Bwmat

+0

谢谢。是否因为终结器必须运行,所以它比GC有更高的优先级? – user2001996

回答

3

如果堆存在最初的浪涌,那么你很好。

如果你分配的对象太多,你可以OOM,速度与它无关。

但是,如果您没有比堆能够处理的更多活动对象,那么您将无法进入OOM。分配新对象的一部分是检查是否需要GC。所以你不能“跑出去”。

+0

感谢你的回答,所以基本上,GC把任何内存分配的对象搁置,直到它有足够的内存分配它。这说得通。 – user2001996

相关问题