JavaRush /Java Blog /Random-TW /喝咖啡休息#132。讓我們來看看JDK中最新的垃圾收集器ZGC。Java中HashMap、LinkedHashMa...

喝咖啡休息#132。讓我們來看看JDK中最新的垃圾收集器ZGC。Java中HashMap、LinkedHashMap、TreeMap有什麼差別

在 Random-TW 群組發布

介紹 ZGC,JDK 最新的垃圾收集器

來源:Inside Java ZGC 或 Z Garbage Collector 是 JDK 中最現代的垃圾收集器。它最初作為實驗性功能出現在 JDK 11 中。在 JEP 377 增強功能獲得批准後,ZGC 成為 JDK 15 中的生產功能。在本文中,我們將探討 ZGC 的目標和未來。 喝咖啡休息#132。 讓我們來看看JDK中最新的垃圾收集器ZGC。 Java中HashMap、LinkedHashMap、TreeMap有什麼差別 - 1

中關村評論

ZGC 被設計為一個可擴展、低延遲的垃圾收集器。ZGC操作期間的最大停頓時間很少超過250微秒,是的,正是微秒,平均停頓時間為數十微秒。ZGC 具有高度可擴展性,最小堆大小範圍為 8 MB 到 16 TB。需要注意的是,暫停時間不會隨著堆疊大小的增加而增加。因此,即使堆大小達到幾 TB,暫停時間仍將以微秒為單位。儘管ZGC提供了低延遲和高可擴展性,但它的代價是吞吐量比G1低約10%。確切的吞吐量降低取決於應用程式設計、系統架構和業務需求。

使用ZGC

由於 G1 是從 JDK 9 開始的預設垃圾收集器,因此您需要設定 VM 標誌 -XX:+UseZGC 才能使用 ZGC。使用ZGC時,最重要的配置是設定最大堆大小,-Xmx。堆大小應該足夠大以處理應用程式的即時設定。它還必須有額外的儲備來執行垃圾收集。堆上的可用空間越多,垃圾回收的頻率就越低。但請注意,這必須與記憶體使用相平衡。

中關村的進一步發展

自從作為 JDK 15 中的生產功能發布以來,ZGC 一直在持續積極開發。隨著 JDK 16 的發布,它引入了線程堆疊並行處理(JEP 376),JDK 18 添加了行重複資料刪除作為附加功能。未來,計劃ZGC將成為多代,但實施此改進的具體時間框架尚未確定。

有關 ZDC 的更多信息

Java中HashMap、LinkedHashMap、TreeMap有什麼差別

來源:Rrtutors 如果您想在 Java 程式中儲存鍵值對,那麼 Java 集合可以根據您的需求提供許多選項。其中包括LinkedHashmapHashMapTreeMap。這三個類別的主要區別在於它們的內部實作和某些情況下的具體應用。 喝咖啡休息#132。 讓我們來看看JDK中最新的垃圾收集器ZGC。 Java中HashMap、LinkedHashMap、TreeMap有什麼差別 - 2

Java中HashMap、LinkedHashMap和TreeMap的區別

以下是上述三個類別之間基於實作、排序、排序以及對空鍵和值的支援的主要區別。

執行

HashMapLinkedHashMap都實作了Map接口,而TreeMap實作了MapNavigableMap和 vSortedMap 介面。 LinkedHashMap實作為雙鍊錶桶,HashMap實作為哈希表,TreeMap實作為樹。

排序和排序

  • HashMap不保證迭代的順序。然而,當添加新元素時,它可能會完全改變。

  • LinkedHashMap將依照條目放入映射中的順序進行迭代。

  • TreeMap根據鍵的compareTo()方法(或外部比較器)依照鍵的「自然順序」進行迭代。它還實作了SortedMap接口,其中包含依賴排序順序的方法。

空鍵和值

HashMapLinkedHashMap支援 null 值以及鍵值,而TreeMap不支援 null 值,因為它們支援自然元素類型。作為一個直覺的範例,讓我們創建一個 HashMapLinkedHashMapTreeMap
import java.util.HashMap;

import java.util.LinkedHashMap;

import java.util.Map;

import java.util.TreeMap;

public class HashMap_LinkedHashMap_TreeMap {

            public static void main(String[] args) {

                  Map Treemapu = new TreeMap();

                  Treemapu.put("First", "Java");

                  Treemapu.put("Second", "Python");

                  System.out.println("TreeMap values are: \n" + Treemapu);

                  Map Hashimapu = new HashMap();

                  Hashimapu.put("First", "Java");

                  Hashimapu.put("Second", "Python");

                  System.out.println("HashMap Values are: \n" + Hashimapu);

                  Map LinkedHashiMapu = new LinkedHashMap();

                  LinkedHashiMapu.put("First", "Java");

                  LinkedHashiMapu.put("Second", "Python");

                  System.out.println("LinkedHashMap values are: \n" + LinkedHashiMapu);

            }

}
在輸出中我們得到:
{First=Java, Second=Python} HashMap 值為:{Second=Python, First=Java} LinkedHashMap 值為:{First=Java, Second=Python}
因此,所有三個類別都表示從唯一鍵到值的映射,因此實作了Map介面。
  • HashMap是基於鍵散列的對應。它支援 O(1) 取得/放置操作。鍵必須具有一致的hashCode()equals()實作。

  • LinkedHashMap與HashMap非常相似,但它具有添加(或存取)元素的順序,因此迭代順序與放置順序(或存取順序,取決於設計參數)相同。

  • TreeMap是基於樹的映射。它的 put/get 操作需要 O(log n) 時間。這要求元素具有某種比較機制,無論是比較或比較器。迭代的順序由這個機制決定。

留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION