JavaRush /จาวาบล็อก /Random-TH /คอฟฟี่เบรค #132. มาดู ZGC เครื่องเก็บขยะใหม่ล่าสุดใน JDK ...

คอฟฟี่เบรค #132. มาดู ZGC เครื่องเก็บขยะใหม่ล่าสุดใน JDK กันดีกว่า อะไรคือความแตกต่างระหว่าง HashMap, LinkedHashMap และ TreeMap ใน Java

เผยแพร่ในกลุ่ม

ขอแนะนำ ZGC เครื่องเก็บขยะรุ่นใหม่ล่าสุดของ JDK

ที่มา: ภายใน Java ZGC หรือ Z Garbage Collector เป็นตัวรวบรวมขยะที่ทันสมัยที่สุดใน JDK เดิมปรากฏใน JDK 11 เป็นคุณลักษณะทดลอง ZGC กลายเป็นฟีเจอร์การใช้งานจริงใน JDK 15 หลังจากอนุมัติการปรับปรุง JEP 377 แล้ว ในบทความนี้ เราจะดูเป้าหมายและอนาคตของ ZGC คอฟฟี่เบรค #132.  มาดู ZGC เครื่องเก็บขยะใหม่ล่าสุดใน JDK กันดีกว่า  อะไรคือความแตกต่างระหว่าง HashMap, LinkedHashMap และ TreeMap ใน Java - 1

รีวิว ZGC

ZGC ได้รับการออกแบบมาให้เป็นตัวรวบรวมขยะที่ปรับขนาดได้และมีเวลาในการตอบสนองต่ำ เวลาหยุดชั่วคราวสูงสุดระหว่างการทำงานของ ZGC แทบจะไม่เกิน 250 ไมโครวินาที ใช่ ไมโครวินาทีพอดี โดยมีเวลาหยุดชั่วคราวเฉลี่ยสิบไมโครวินาที ZGC สามารถปรับขนาดได้สูง โดยมีขนาดฮีปขั้นต่ำตั้งแต่ 8 MB ถึง 16 TB สิ่งสำคัญคือต้องทราบว่าเวลาหยุดชั่วคราวไม่เพิ่มขึ้นตามขนาดฮีป ดังนั้น แม้จะมีขนาดหลายเทราไบต์ แต่เวลาหยุดชั่วคราวจะยังคงวัดเป็นไมโครวินาที แม้ว่า ZGC จะให้เวลาแฝงต่ำและความสามารถในการปรับขนาดสูง แต่ก็มีต้นทุนการรับส่งข้อมูลที่ต่ำกว่าประมาณ 10% เมื่อเทียบกับ G1 การลดปริมาณงานที่แน่นอนขึ้นอยู่กับการออกแบบแอปพลิเคชัน สถาปัตยกรรมระบบ และความต้องการทางธุรกิจ

การใช้ ZGC

เนื่องจาก G1 เป็นตัวรวบรวมขยะเริ่มต้นที่เริ่มต้นด้วย JDK 9 คุณจะต้องตั้งค่าแฟล็ก VM -XX:+UseZGC เพื่อใช้ ZGC เมื่อใช้ ZGC การกำหนดค่าที่สำคัญที่สุดคือการตั้งค่าขนาดฮีปสูงสุด -Xmx ขนาดฮีปควรใหญ่พอที่จะรองรับชุดที่ใช้งานอยู่ของแอปพลิเคชันของคุณ และต้องมีสำรองเพิ่มเติมเพื่อดำเนินการเก็บขยะด้วย ยิ่งมีพื้นที่ว่างบนฮีปมากเท่าไร การรวบรวมขยะก็จะยิ่งน้อยลงเท่านั้น แต่โปรดทราบว่าสิ่งนี้จะต้องสมดุลกับการใช้หน่วยความจำ

การพัฒนาเพิ่มเติมของ ZGC

นับตั้งแต่เปิดตัวเป็นฟีเจอร์การใช้งานจริงใน JDK 15 ZGC ก็มีการพัฒนาอย่างต่อเนื่อง ด้วยการเปิดตัว JDK 16 ได้เปิดตัวการประมวลผลแบบขนานของเธรดสแต็ก (JEP 376) และ JDK 18 ได้เพิ่มการขจัดข้อมูลซ้ำซ้อนของแถวเป็นคุณสมบัติเพิ่มเติม ในอนาคต มีการวางแผนว่า ZGC จะกลายเป็นคนหลายรุ่น แม้ว่าจะยังไม่ได้กำหนดกรอบเวลาที่เฉพาะเจาะจงสำหรับการดำเนินการปรับปรุงนี้ก็ตาม

ข้อมูลเพิ่มเติมเกี่ยวกับ ZDC

อะไรคือความแตกต่างระหว่าง HashMap, LinkedHashMap และ TreeMap ใน Java

ที่มา: Rrtutors หากคุณต้องการจัดเก็บคู่คีย์-ค่าในโปรแกรม Java คอลเลกชั่น Java จะมีตัวเลือกมากมายสำหรับสิ่งนี้ ขึ้นอยู่กับความต้องการของคุณ ซึ่งรวมถึงLinkedHashmap , HashMapและTreeMap ความแตกต่างที่สำคัญระหว่างทั้งสามคลาสนี้อยู่ที่การใช้งานภายในและการใช้งานเฉพาะในบางกรณี คอฟฟี่เบรค #132.  มาดู ZGC เครื่องเก็บขยะใหม่ล่าสุดใน JDK กันดีกว่า  อะไรคือความแตกต่างระหว่าง HashMap, LinkedHashMap และ TreeMap ใน Java - 2

ความแตกต่างระหว่าง HashMap, LinkedHashMap และ TreeMap ใน Java

ต่อไปนี้เป็นข้อแตกต่างหลักระหว่างคลาสทั้งสามที่กล่าวถึง โดยอิงตามการใช้งาน การเรียงลำดับ การเรียงลำดับ และการรองรับคีย์และค่า Null

การนำไปปฏิบัติ

ทั้งHashMapและLinkedHashMapใช้ อินเทอร์เฟ ซ Mapในขณะที่TreeMapใช้ อินเทอร์เฟซ Map , NavigableMapและ vSortedMap LinkedHashMapถูกนำมาใช้เป็นถังรายการแบบลิงก์คู่HashMapถูกนำมาใช้เป็นตารางแฮช และTreeMapถูกนำมาใช้เป็นแผนผัง

การเรียงลำดับและการเรียงลำดับ

  • HashMapไม่รับประกันเกี่ยวกับลำดับของการวนซ้ำ อย่างไรก็ตาม มันสามารถเปลี่ยนแปลงได้อย่างสมบูรณ์เมื่อมีการเพิ่มองค์ประกอบใหม่

  • LinkedHashMapจะวนซ้ำตามลำดับที่มีการวางรายการลงในแผนที่

  • TreeMapวนซ้ำตาม “ลำดับตามธรรมชาติ” ของคีย์ตาม วิธี comparisonTo() (หรือตัวเปรียบเทียบภายนอก) นอกจากนี้ยังใช้ อินเทอร์เฟซ SortedMapซึ่งมีวิธีการที่ขึ้นอยู่กับลำดับการจัดเรียง

ปุ่ม Null และค่า

HashMapsและLinkedHashMapรองรับค่า Null เช่นเดียวกับค่าคีย์ ในขณะที่TreeMapsไม่รองรับค่า Null เนื่องจากรองรับประเภทองค์ประกอบตามธรรมชาติ สำหรับตัวอย่างภาพ เรามาสร้างHashMap , LinkedHashMapและTreeMapกัน
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()และเท่ากับ() ที่สอดคล้องกัน

  • LinkedHashMapคล้ายกับHashMapมาก แต่มีลำดับในการเพิ่ม (หรือเข้าถึงองค์ประกอบ) ดังนั้นลำดับการวนซ้ำจึงเหมือนกับลำดับตำแหน่ง (หรือลำดับการเข้าถึง ขึ้นอยู่กับพารามิเตอร์การออกแบบ)

  • TreeMapเป็นการทำแผนที่แบบต้นไม้ การดำเนินการย้าย/รับจะใช้เวลา O(log n) สิ่งนี้กำหนดให้องค์ประกอบต้องมีกลไกการเปรียบเทียบบางประเภท ไม่ว่าจะด้วยการเปรียบเทียบหรือตัวเปรียบเทียบ ลำดับของการวนซ้ำถูกกำหนดโดยกลไกนี้

ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION