ขอแนะนำ ZGC เครื่องเก็บขยะรุ่นใหม่ล่าสุดของ JDK
ที่มา: ภายใน Java ZGC หรือ Z Garbage Collector เป็นตัวรวบรวมขยะที่ทันสมัยที่สุดใน JDK เดิมปรากฏใน JDK 11 เป็นคุณลักษณะทดลอง ZGC กลายเป็นฟีเจอร์การใช้งานจริงใน JDK 15 หลังจากอนุมัติการปรับปรุง JEP 377 แล้ว ในบทความนี้ เราจะดูเป้าหมายและอนาคตของ ZGCรีวิว 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
- เจอีพี 377
- เจอีพี 376
- ZGC - อนาคตของการรวบรวมขยะที่มีความหน่วงต่ำอยู่ที่นี่แล้ว
- เอกสาร ZGC อย่างเป็นทางการ
อะไรคือความแตกต่างระหว่าง HashMap, LinkedHashMap และ TreeMap ใน Java
ที่มา: Rrtutors หากคุณต้องการจัดเก็บคู่คีย์-ค่าในโปรแกรม Java คอลเลกชั่น Java จะมีตัวเลือกมากมายสำหรับสิ่งนี้ ขึ้นอยู่กับความต้องการของคุณ ซึ่งรวมถึงLinkedHashmap , HashMapและTreeMap ความแตกต่างที่สำคัญระหว่างทั้งสามคลาสนี้อยู่ที่การใช้งานภายในและการใช้งานเฉพาะในบางกรณีความแตกต่างระหว่าง 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);
}
}
ที่ผลลัพธ์ที่เราได้รับ:
-
HashMapเป็นแผนที่ที่อิงจากการแฮชคีย์ รองรับการดำเนินการรับ/วาง O(1) คีย์ต้องมี การใช้ งานhashCode()และเท่ากับ() ที่สอดคล้องกัน
-
LinkedHashMapคล้ายกับHashMapมาก แต่มีลำดับในการเพิ่ม (หรือเข้าถึงองค์ประกอบ) ดังนั้นลำดับการวนซ้ำจึงเหมือนกับลำดับตำแหน่ง (หรือลำดับการเข้าถึง ขึ้นอยู่กับพารามิเตอร์การออกแบบ)
-
TreeMapเป็นการทำแผนที่แบบต้นไม้ การดำเนินการย้าย/รับจะใช้เวลา O(log n) สิ่งนี้กำหนดให้องค์ประกอบต้องมีกลไกการเปรียบเทียบบางประเภท ไม่ว่าจะด้วยการเปรียบเทียบหรือตัวเปรียบเทียบ ลำดับของการวนซ้ำถูกกำหนดโดยกลไกนี้
GO TO FULL VERSION