7.1* วิธีการเลือกเครื่องเก็บขยะที่เหมาะสม

หากแอปพลิเคชันของคุณไม่มีข้อกำหนดด้านเวลาแฝงที่เข้มงวด คุณควรรันแอปพลิเคชันและปล่อยให้ JVM เลือกตัวรวบรวมที่เหมาะสมเอง

ในกรณีส่วนใหญ่ การตั้งค่าเริ่มต้นจะทำงานได้ดี หากจำเป็น คุณสามารถปรับขนาดฮีปเพื่อปรับปรุงประสิทธิภาพได้ หากประสิทธิภาพยังไม่เป็นไปตามที่คาดหวัง ให้ลองแก้ไขตัวรวบรวมเพื่อให้เหมาะกับความต้องการของแอปพลิเคชันของคุณ

  • ตามลำดับ หากแอปพลิเคชันมีชุดข้อมูลขนาดเล็ก (สูงสุดประมาณ 100 MB) และ/หรือแอปพลิเคชันจะทำงานบนโปรเซสเซอร์ตัวเดียวโดยไม่มีข้อกำหนดด้านเวลาแฝง
  • ขนาน _ หากลำดับความสำคัญคือประสิทธิภาพสูงสุดของแอปพลิเคชัน และไม่มีข้อกำหนดด้านเวลาแฝง (หรือหยุดชั่วคราวตั้งแต่หนึ่งวินาทีขึ้นไปเป็นที่ยอมรับ)
  • ซีเอ็มเอส/G1 . หากเวลาตอบสนองมีความสำคัญมากกว่าปริมาณงานโดยรวม และการหยุดการรวบรวมขยะควรสั้นกว่าหนึ่งวินาที
  • แซดจีซี หากเวลาตอบสนองมีความสำคัญสูงและ/หรือมีฮีปขนาดใหญ่มากเข้ามาเกี่ยวข้อง

7.2* คำแนะนำในการเก็บขยะ

หลีกเลี่ยงการทริกเกอร์ด้วยตนเอง

นอกเหนือจากกลไกพื้นฐานของการรวบรวมขยะแล้ว จุดที่สำคัญที่สุดประการหนึ่งเกี่ยวกับกระบวนการนี้ใน Java ก็คือมันไม่ได้ถูกกำหนดขึ้น นั่นคือเป็นไปไม่ได้ที่จะคาดเดาว่าจะเกิดขึ้นเมื่อใด

เมื่อใช้เมธอด System.gc() หรือ Runtime.gc() คุณสามารถใส่คำใบ้ในโค้ดของคุณเพื่อเริ่มการทำงานของตัวรวบรวมขยะ แต่นี่ไม่ได้รับประกันว่าจะรันจริง

ใช้เครื่องมือวิเคราะห์

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

คุณสามารถใช้เครื่องมือตรวจสอบเช่น jstat หรือ Java Flight Recorder เพื่อดูว่าการใช้งานฮีปเพิ่มขึ้นอย่างไม่มีกำหนดหรือไม่ ซึ่งอาจบ่งบอกถึงจุดบกพร่องในโค้ด

ชอบการตั้งค่าเริ่มต้น

หากคุณมีแอปพลิเคชัน Java แบบสแตนด์อโลนขนาดเล็ก คุณอาจไม่จำเป็นต้องตั้งค่าการรวบรวมขยะ การตั้งค่าเริ่มต้นจะให้บริการคุณได้ดี

ใช้แฟล็ก JVM เพื่อปรับแต่ง

วิธีที่ดีที่สุดในการตั้งค่าการรวบรวมขยะใน Java คือการตั้งค่าแฟล็ก JVM สามารถใช้แฟล็กเพื่อตั้งค่าตัวรวบรวมขยะ (เช่น Serial, G1 เป็นต้น) ขนาดเริ่มต้นและสูงสุดของฮีป ขนาดของพาร์ติชันฮีป (เช่น Young generation, Old generation) และอื่นๆ มากกว่า.

เลือกก๊อกน้ำที่เหมาะสม

แนวทางที่ดีในแง่ของการตั้งค่าเริ่มต้นคือลักษณะของแอปพลิเคชันแบบกำหนดเอง ตัวอย่างเช่น ตัวเก็บขยะที่ทำงานพร้อมกันนั้นมีประสิทธิภาพ แต่มักจะทำให้เกิดเหตุการณ์ "หยุดโลก" ทำให้เหมาะสำหรับการประมวลผลภายในที่ยอมรับการหยุดชั่วคราวได้

ในขณะเดียวกัน ตัวรวบรวมขยะ CMS ได้รับการออกแบบมาเพื่อลดเวลาแฝง ซึ่งทำให้เหมาะสำหรับเว็บแอปพลิเคชันที่การตอบสนองเป็นสิ่งสำคัญ