ความแตกต่างระหว่างโหมดไคลเอนต์ JVM และโหมดเซิร์ฟเวอร์
ความแตกต่างที่สำคัญระหว่างโหมดเซิร์ฟเวอร์ JVM และโหมดไคลเอนต์คือเมื่อเริ่มต้น: - โหมดเซิร์ฟเวอร์ช้าเมื่อเริ่มต้น แต่เมื่อเริ่มต้นประสิทธิภาพจะได้รับการปรับปรุงอย่างมาก
JVM สามารถปรับปรุงประสิทธิภาพได้อย่างมากเมื่อทำงานในโหมดเซิร์ฟเวอร์ ความเร็วในการเริ่มต้นของแอปพลิเคชันในโหมดเซิร์ฟเวอร์จะช้ากว่าโหมดไคลเอนต์ประมาณ 10% แต่ความเร็วในการทำงานนั้นเร็วกว่าไคลเอนต์ VM อย่างน้อย 10 เท่า
เมื่อไม่ได้ระบุพารามิเตอร์โหมดการทำงานเครื่องเสมือนจะเริ่มตรวจพบว่าโฮสต์เป็นเซิร์ฟเวอร์หรือไม่ ถ้าเป็นเช่นนั้นจะเริ่มในโหมดเซิร์ฟเวอร์ มิฉะนั้นจะเริ่มในโหมดไคลเอนต์ พื้นฐานสำหรับการตรวจจับ J2SE5.0 อย่างน้อย 2 ซีพียูและหน่วยความจำอย่างน้อย 2GB
เนื่องจาก CPU ของเซิร์ฟเวอร์หน่วยความจำและฮาร์ดดิสก์นั้นแข็งแกร่งกว่าเครื่องไคลเอนต์หลังจากปรับใช้โปรแกรมจึงควรเริ่มต้นในโหมดเซิร์ฟเวอร์เพื่อให้ได้ประสิทธิภาพที่ดีขึ้น
JVM ค่าเริ่มต้นเป็น -xms คือ 1m, -xmx คือ 64m ในโหมดไคลเอนต์ JVM ค่าเริ่มต้นเป็น -xms คือ 128m, -xmx คือ 1024m ในโหมดเซิร์ฟเวอร์
เซิร์ฟเวอร์: การเริ่มต้นช้าและการรวบรวมที่สมบูรณ์ยิ่งขึ้น คอมไพเลอร์เป็นคอมไพเลอร์แบบปรับตัวที่มีประสิทธิภาพสูงและได้รับการออกแบบมาเพื่อเพิ่มประสิทธิภาพแอปพลิเคชันฝั่งเซิร์ฟเวอร์และเพิ่มความเร็วในการดำเนินการโปรแกรมในสภาพแวดล้อมเซิร์ฟเวอร์
ไคลเอนต์: การเริ่มต้นอย่างรวดเร็วการใช้หน่วยความจำต่ำการรวบรวมอย่างรวดเร็วปรับให้เหมาะสมสำหรับแอปพลิเคชันเดสก์ท็อปปรับให้เหมาะสมเพื่อลดเวลาเริ่มต้นในสภาพแวดล้อมไคลเอนต์
เมื่อใช้ JVM เพื่อเริ่มแอปพลิเคชันแบบโต้ตอบของอินเทอร์เฟซ GUI ขอแนะนำให้ใช้โหมดไคลเอนต์เมื่อใช้ JVM เพื่อเรียกใช้โปรแกรมพื้นหลังเซิร์ฟเวอร์
เราสามารถตรวจสอบโหมด JVM ที่ทำงานได้โดยการรัน: Java -Version
เกี่ยวกับ GCC ในรูปที่ 1
ในโหมดลูกค้ารุ่นใหม่เลือกอนุกรม GC ในขณะที่รุ่นเก่าเลือกอนุกรม GC ในขณะที่รุ่นเก่าเลือกอนุกรม GC
ในโหมดเซิร์ฟเวอร์รุ่นใหม่เลือกการรีไซเคิลแบบขนานของ GC ในขณะที่รุ่นเก่าเลือก GC แบบขนาน
โดยทั่วไปการพูดมีสองวิธีในการเลือกแอปพลิเคชันระบบของเรา: ลำดับความสำคัญของปริมาณงานและลำดับความสำคัญของเวลาหยุดชั่วคราว สำหรับลำดับความสำคัญของปริมาณงานจะมีการใช้วิธีการ GC แบบขนานเริ่มต้นของเซิร์ฟเวอร์และสำหรับการหยุดเวลาหยุดชั่วคราวจะใช้วิธี GC (CMS) พร้อมกัน
คะแนนความรู้เพิ่มเติมอื่น ๆ
JDK มีไคลเอนต์ VM, VM สองประเภทและแอพพลิเคชั่นเซิร์ฟเวอร์ VM โซลูชันทั้งสองแบ่งปันฐานรหัสฮอตสปอตของสภาพแวดล้อม Java Runtime แต่ใช้คอมไพเลอร์ที่แตกต่างกันคุณสมบัติประสิทธิภาพที่ไม่ซ้ำกันสำหรับลูกค้าและเซิร์ฟเวอร์ที่มีความแตกต่างรวมถึงการเขียนนโยบายแบบอินไลน์และค่าเริ่มต้นสำหรับกอง
แม้ว่าเซิร์ฟเวอร์จะคล้ายกับเครื่องเสมือนไคลเอนต์ แต่เซิร์ฟเวอร์ VM ได้ปรับความเร็วการทำงานสูงสุดสูงสุดเป็นพิเศษ วัตถุประสงค์คือเพื่อดำเนินการแอปพลิเคชันเซิร์ฟเวอร์ที่ดำเนินมายาวนานซึ่งต้องใช้ความเร็วในการวิ่งที่เร็วที่สุดเกินกว่าเวลาเริ่มต้นที่รวดเร็วหรือรอยเท้าหน่วยความจำรันไทม์ที่เล็กลง
คอมไพเลอร์ไคลเอนต์ VM เป็นเครื่องเสมือนคลาสสิกและคอมไพเลอร์ที่ใช้โดยการอัพเกรดแบบเรียลไทม์ (JIT) ผ่าน JDK รุ่นก่อนหน้า เครื่องเสมือนจริงของไคลเอ็นต์ให้ประสิทธิภาพที่ดีขึ้นสำหรับการใช้งานแอปพลิเคชันและแอปเพล็ต ฮอตสปอตของ Java Virtual Machines ลูกค้าได้ลดเวลาเริ่มต้นและการใช้หน่วยความจำของแอปพลิเคชันเพื่อให้เหมาะอย่างยิ่งสำหรับสภาพแวดล้อมของลูกค้า โดยทั่วไประบบไคลเอนต์มีส่วนต่อประสานกราฟิกที่ดีกว่า
ดังนั้นความแตกต่างที่แท้จริงก็อยู่ที่ระดับคอมไพเลอร์:
คอมไพเลอร์เครื่องเสมือนไคลเอ็นต์ไม่ได้พยายามที่จะทำการปรับให้เหมาะสมที่ซับซ้อนมากขึ้นโดยคอมไพเลอร์บนเครื่องเสมือนของเซิร์ฟเวอร์ แต่ในระหว่างการแลกเปลี่ยนจะต้องใช้เวลาน้อยลงในการวิเคราะห์และรวบรวมโค้ดชิ้นหนึ่ง ซึ่งหมายความว่าเครื่องเสมือนจริงของไคลเอนต์สามารถเริ่มต้นได้เร็วขึ้นและต้องใช้รอยเท้าหน่วยความจำที่เล็กกว่า
เครื่องเสมือนของเซิร์ฟเวอร์มีคอมไพเลอร์แบบปรับตัวขั้นสูงที่รองรับการเพิ่มประสิทธิภาพคอมไพเลอร์ C ++ จำนวนมากสำหรับการปรับให้เหมาะสมประเภทเดียวกันและการเพิ่มประสิทธิภาพบางอย่างที่ไม่สามารถทำได้ด้วยคอมไพเลอร์แบบดั้งเดิมเช่นการเรียกวิธีการเสมือนจริง นี่คือความได้เปรียบในการแข่งขันและประสิทธิภาพคอมไพเลอร์แบบคงที่ เทคนิคการปรับให้เหมาะสมแบบปรับตัวนั้นมีความยืดหยุ่นมากในวิธีการของมันและมักจะเหนือกว่าการวิเคราะห์แบบคงที่และเทคนิคการรวบรวมขั้นสูง
เมื่อเริ่มต้นโหมดเซิร์ฟเวอร์ความเร็วจะช้า แต่เมื่อทำงานแล้วประสิทธิภาพจะได้รับการปรับปรุงอย่างมาก เหตุผลก็คือเมื่อเครื่องเสมือนอยู่ในโหมด -Client จะใช้รหัสคอมไพเลอร์ที่มีน้ำหนักเบาชื่อ C1 ในขณะที่เครื่องเสมือนเริ่มต้นในโหมด -Server ใช้รหัสคอมไพเลอร์ที่มีน้ำหนักค่อนข้างหนา C2 C2 มีการรวบรวมอย่างละเอียดมากกว่าคอมไพเลอร์ C1 และหลังจากเสิร์ฟมันมีประสิทธิภาพสูงกว่า
โดยทั่วไปเพียงแค่เปลี่ยนลำดับของการกำหนดค่าทั้งสอง -เซิร์ฟเวอร์ที่รู้จักและ -รู้จัก -รู้จักกันตราบใดที่ไดเรกทอรี Java_home/Jre/bin มีอยู่ในเวลาเดียวกันซึ่งสอดคล้องกับ JVM ที่เกี่ยวข้อง
หลังจากพูดมากฉันได้สรุปในประโยคเดียวจริง ๆ :
แอปพลิเคชันเริ่มช้า แต่ทำงานเร็วขึ้นในโหมดเซิร์ฟเวอร์ JVM ในขณะที่แอปพลิเคชันเริ่มต้นอย่างรวดเร็ว แต่ทำงานเร็วขึ้นในโหมดไคลเอนต์ JVM
แนะนำ: โปรดเรียกใช้ในโหมดเซิร์ฟเวอร์บนเซิร์ฟเวอร์และเรียกใช้ในโหมดไคลเอนต์ในโหมดไคลเอนต์หรือโหมด GUI