簡體   English   中英

優化大型集合的垃圾回收

[英]Optimizing for garbage collection of large collections

我正在從數據庫中讀取此類List<Rows<Long,String,ByteBuffer>>的大量集合

然后,我從這些行列表中逐一讀取數據,並將它們中的數據放入容器對象中。 我應該在繼續閱讀每一行時將列表中的各個行取消引用為null還是 應該最終取消對它們的引用以便可以對其進行垃圾回收?

由於每一行都是很大的,包含大的字符串/斑點/文本內容等,因此我正在嘗試針對垃圾回收進行優化。 希望這不稱為過早優化!

如果您還沒有衡量程序的性能,那是過早的優化。

(並非在測量之前執行的所有優化都為時過早,但是這類微優化確實如此。)

我建議取消引用它們。 這不是過早的優化,因為與時間不同,程序完成該程序時可用的內存量不受您控制。

正如larsmans所說,這正是過早優化的定義。 但是,經常會出現諸如此類的問題,而不是忘記它們,我喜歡立即添加分析點(由開/關開關包裹-如Logger.isEnabled()),然后繼續進行。 查看http://netbeans.org/features/java/profiler.html以獲得簡單的分析工具/設置

正如larsmans所提到的,存在復雜性的缺點。

但是,也可能存在性能上的缺點-取消引用涉及寫入內存,而在現代的垃圾收集環境中,寫入內存並不一定只是存儲。 為了收集者的利益,可能還需要進行一些記賬工作-在垃圾回收的上下文中查找“寫障礙”和“卡片標記”。 寫入也會對處理器緩存產生影響。 在多處理器系統上,它將導致處理器之間的高速緩存一致性流量,從而消耗帶寬。

現在,我認為這些影響都不是很大。 但是您應該意識到,寫入內存並不總是像您想象的那樣便宜。 這就是為什么您必須在優化之前先進行概要分析,然后再進行概要分析!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM