2015-06-21 45 views
0

我有一个问题,我会尽我所能解释它。批处理系统如何处理很多对象

批处理框架,如spring批处理少量的对象。

它们应该逐个处理对象,以免它们遇到Java堆空间错误。

这些框架或系统会对垃圾产生什么影响?

有时候他们打电话给System.gc(),或者他们用不同的方式处理它?

+0

他们让垃圾收集器清理,通常做得非常好 - 除非程序引用许多不再需要的对象。 – meriton

+0

你有什么特定的问题吗?您关心的具体用例/场景? –

+0

我读了一些关于* System.gc()*的使用的说明,这是一种不好的做法。我知道它的用法并不能保证任何东西,但我真的不明白它为什么如果它没有任何有害的后果使用如此糟糕。 –

回答

0

垃圾收集将在投掷OutOfMemoryError之前完成,所以您不会用完内存,因为消耗超过了清理。

这个问题太笼统,不能涵盖什么框架可能会或可能不会做什么,但总的来说,最好尽可能少地保留对象的引用。这意味着采用“流”方式处理 - 在处理下一个对象之前,对象上的所有操作都会发生(例如,从输入流,流程,写入输出中读取)。

这与读取所有对象,处理所有对象然后写入所有输出相反 - 这需要大量内存使用。