java - Java ( Collection的Collection ) 方法是否強制垃圾 Collection的元素?

  显示原文与译文双语对照的内容
0 0

我編寫了一個Java程序來構建一個巨大的arraylist ( 擁有超過 7萬的元素) 。 然後,我將在這裡元素的元素上迭代,我建立了一個第二個 arraylist,它的大小也像。 在迭代期間,當超過GC開銷限制時,會出現內存異常。

在任何時候,我都想一個類似於 2nd 個arraylist的大小,將它的元素保存到一個文件或者資料庫表中,然後調用上的。 但是這種調用會強制使用元素的垃圾 Collection? 如果沒有那麼我的問題仍然沒有解決。

謝謝你的建議。

时间:原作者:4个回答

0 0

調用 removeAll 將不會觸發垃圾 Collection,並且手動觸發垃圾 Collection 將無法幫助。 讓垃圾 Collection 按要求發生。 ( 你可以確定它會在你的應用程序得到運行之前運行。 只有在運行完整的GC后沒有足夠的空間,才會引發 OOME

你需要做的是減少可以訪問對象的數量和大小。 這意味著垃圾 Collection 運行時,它將回收更多垃圾,你的應用程序將能夠繼續運行。

這聽起來像限制 2nd array 大小的策略可以以幫助減少可以達到的對象的工作集。 另一個可能是使用 ArrayList.set(pos, null) 使第一個列表中不再需要的條目無效。 但是,在你的問題中沒有足夠的細節來幫助你。

或者,只需增加jvm堆大小的最大。

原作者:
0 0

垃圾回收器將根據需要自動運行。 你可以通過 System.gc() 手動調用它,但這對你的情況沒有幫助。

這裡有一個 post post,解釋了錯誤的含義以及如何將它的禁用:

如果在垃圾 Collection 中花費太多的時間,並行/併發收集器將引發 OutOfMemoryError: 如果在垃圾 Collection 中花了 98%以上的總時間,並且恢復了小於 2%的堆,將拋出一個,。 這個特性是為了防止應用程序在一段時間內運行,因為堆太小,因為堆太小。 如果需要,可以通過向 命令行 中添加 -XX:-UseGCOverheadLimit 來禁用這裡功能。

原作者:
...