เคล็ดลับเกี่ยวกับการเขียนมาตรฐานขนาดเล็กจากผู้สร้าง Java HotSpot :
กฎที่ 0:อ่านกระดาษที่มีชื่อเสียงบน JVMs และการวัดระดับไมโคร หนึ่งที่ดีคือไบรอันเก๊ 2005 อย่าคาดหวังมากเกินไปจากการวัดแบบไมโคร พวกเขาวัดเฉพาะช่วงประสิทธิภาพการทำงานของ JVM ที่ จำกัด
กฎที่ 1:รวมขั้นตอนการอุ่นเครื่องที่รันเคอร์เนลทดสอบของคุณตลอดทางเสมอเพียงพอที่จะทริกเกอร์การเริ่มต้นและการรวบรวมทั้งหมดก่อนช่วงเวลา (การวนซ้ำน้อยลงก็โอเคในช่วงวอร์มอัพกฎของหัวแม่มือคือการวนซ้ำภายในหลายหมื่นครั้ง)
กฎข้อที่ 2:เรียกใช้เสมอกับ-XX:+PrintCompilation
, -verbose:gc
ฯลฯ เพื่อให้คุณสามารถตรวจสอบว่าคอมไพเลอร์และส่วนอื่น ๆ ของ JVM ยังไม่ได้ทำผลงานที่ไม่คาดคิดในช่วงระยะเวลาของคุณ
กฎข้อที่ 2.1:พิมพ์ข้อความที่จุดเริ่มต้นและจุดสิ้นสุดของการกำหนดเวลาและการอุ่นเครื่องเพื่อให้คุณสามารถตรวจสอบว่าไม่มีผลลัพธ์จากกฎ 2 ในช่วงระยะเวลา
กฎข้อที่ 3:ระวังความแตกต่างระหว่าง-client
และ-server
, และ OSR และการคอมไพล์ปกติ -XX:+PrintCompilation
ธงรายงานรวบรวม OSR Trouble$1::run @ 2 (41 bytes)
กับที่เข้าสู่ระบบเพื่อแสดงถึงจุดเริ่มต้นที่ไม่ได้เริ่มต้นตัวอย่างเช่น: ต้องการเซิร์ฟเวอร์ไปยังไคลเอนต์และ OSR ปกติหากคุณอยู่หลังประสิทธิภาพที่ดีที่สุด
กฎข้อที่ 4:ระวังผลกระทบการเริ่มต้น อย่าพิมพ์เป็นครั้งแรกในระหว่างช่วงเวลาของคุณเนื่องจากโหลดการพิมพ์และเริ่มต้นคลาส อย่าโหลดคลาสใหม่นอกระยะ warmup (หรือเฟสการรายงานขั้นสุดท้าย) เว้นแต่คุณจะทำการทดสอบคลาสที่โหลดโดยเฉพาะ (และในกรณีนั้นจะโหลดเฉพาะคลาสทดสอบเท่านั้น) กฎข้อที่ 2 เป็นบรรทัดแรกของการป้องกันผลกระทบดังกล่าว
กฎข้อที่ 5:ระวังการ deoptimization และการคอมไพล์ซ้ำ อย่าใช้โค้ดพา ธ ใด ๆ เป็นครั้งแรกในช่วงเวลาเนื่องจากคอมไพเลอร์อาจขยะและคอมไพล์โค้ดใหม่ตามข้อสันนิษฐานในแง่ดีก่อนหน้านี้ว่าพา ธ นั้นจะไม่ถูกใช้เลย กฎข้อที่ 2 เป็นบรรทัดแรกของการป้องกันผลกระทบดังกล่าว
กฎข้อที่ 6:ใช้เครื่องมือที่เหมาะสมเพื่ออ่านใจของคอมไพเลอร์และคาดว่าจะประหลาดใจกับโค้ดที่สร้างขึ้น ตรวจสอบโค้ดด้วยตัวเองก่อนสร้างทฤษฎีเกี่ยวกับสิ่งที่ทำให้บางอย่างเร็วขึ้นหรือช้าลง
กฎข้อที่ 7:ลดเสียงรบกวนในการวัดของคุณ รันเกณฑ์มาตรฐานของคุณบนเครื่องที่เงียบและรันหลายครั้งโดยทิ้งค่าผิดปกติ ใช้-Xbatch
เพื่อคอมไพเลอร์ซีเรียล-XX:CICompilerCount=1
ไลซ์เซชั่นกับแอพพลิเคชั่นและพิจารณาการตั้งค่าเพื่อป้องกันคอมไพเลอร์ไม่ให้ทำงานควบคู่กันไป พยายามอย่างดีที่สุดเพื่อลดค่าใช้จ่าย GC, ตั้งค่าXmx
(ใหญ่พอ) เท่ากับXms
และใช้UseEpsilonGC
หากมี
กฎข้อที่ 8:ใช้ไลบรารีสำหรับการวัดประสิทธิภาพของคุณเนื่องจากอาจมีประสิทธิภาพมากกว่าและดีบั๊กสำหรับวัตถุประสงค์นี้เพียงอย่างเดียวแล้ว เช่นJMH , คาลิปเปอร์หรือบิลและพอล UCSD มาตรฐานที่ดีเยี่ยมสำหรับ Java