處理有大量內存問題的程序。該程序由兩個線程組成。線程1從隊列中拾取數據,處理它們,創建各種對象並將它們傳遞給線程2進行處理並存儲在數據庫中。 已使用的堆大小持續攀升,直到發生OutOfMemory錯誤。多個線程之間共享java對象,何時垃圾收集?
我通過只使用一個線程解決了內存問題,因爲從我所能理解的情況來看,對象最終保持活動狀態,因此沒有GC引用,因爲引用它們仍然貫穿線程2和數據庫存儲過程。
我還有一個問題:線程1中創建的對象何時會被GC編輯?當線程1退出?當線程2,將使用它們進行進一步處理,將退出?
所以有可能是有助於使程序耗費巨大的內存(除了創造大對象)兩兩件事,1)線程2負責DB持久性是緩慢的,並保持對這些對象的引用很長一段時間,2)包含對象,即線程,始終是訪問,並因此會在它創建的對象 – user2163389
@ user2163389的問題是,爲什麼任何線程還是可以參考的對象時,它已經被處理後,那肯定應該不是這種情況 – Voo