垃圾收集 java_关于Java垃圾收集
垃圾收集 java
本文討論的是使用的最流行的框架之一帶來的開銷–我敢打賭,幾乎沒有應用程序不使用java.util.Collections。
本文基于以下事實:框架為例如集合的初始大小提供了默認值。 因此,我們有一個假設,即大多數人不會費心地自行管理其收藏的大小,因此最終會導致未充分利用的收藏浪費了內存。 如果是這樣,我們可以實施一個解決方案,告訴人們創建半空集合的位置以及如何避免浪費內存。
測量
為了檢驗我們的假設,我們決定測量十三種最常見的java.util.Collection成員的用法:
- java.util.HashMap
- java.util.WeakHashMap
- java.util.IdentityHashMap
- java.util.Hashtable
- java.util.LinkedHashMap
- java.util.HashSet
- java.util.LinkedHashSet
- java.util.ArrayList
- java.util.concurrent.ArrayBlockingQueue
- java.util.Vector
- java.util.ArrayDeque
- java.util.PriorityQueue
- java.util.concurrent.ConcurrentHashMap
對于從這些類派生的所有對象,我們每30秒測量一次集合中包含的對象的數量以及集合底層數組中的空白空間的數量。 這種空空間消耗的內存量浪費了集合。 使用特殊版本的Plumbr從556個不同的實際應用程序中收集了這些數據。
結果
為了估算問題的嚴重程度,我們在每30秒后計算了所有收集的總浪費,并針對每個會話取了這些總計的最大值和平均值。 從下圖還可以看到,大多數會話(556個中的397個)的最大摘要浪費小于1 MB,只有32個會話的最大摘要浪費超過10 MB,最大約為60 MB 。
該圖的讀取應類似于以下示例:共有291個應用程序浪費了大于0.1MB但小于1MB的內存。
結論
將結果與分配的堆大小進行比較,我們得出的結論是,這個問題不夠大,至少如果將浪費定義為未使用的堆。 也使我們放棄這一方向的研究是碎片化–這種浪費通常散布在100多個不同的館藏中,從而使優化工作更加困難且更容易出錯。
這項特殊的研究沒有詳細說明動態增加底層陣列上的CPU開銷是否足夠大,這將是另一個故事。
翻譯自: https://www.javacodegeeks.com/2014/01/on-java-collection-waste.html
垃圾收集 java
總結
以上是生活随笔為你收集整理的垃圾收集 java_关于Java垃圾收集的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓短信铃声文件夹(安卓短信铃声)
- 下一篇: 电脑单机游戏下载(电脑单机游戏下载平台哪