ฉันมีเซิร์ฟเวอร์ที่ต้องการทำการทดสอบการทำงานแบบอัตโนมัติ จำเป็นต้องเริ่มต้นออบเจ็กต์ทั้งหมดสองสามพันออบเจ็กต์เพื่อสร้างออบเจ็กต์ในรูปแบบหน่วยความจำ โดยดึงข้อมูลจากไฟล์ปรับแต่ง แต่ก็ยังเป็นเรื่องเล็กน้อยสำหรับคอมพิวเตอร์ และเป็นการบูทเครื่องแทบจะทันทีเมื่อเรียกใช้จาก eclipse
เมื่อฉันรันโปรแกรมเดียวกันโดยเป็นส่วนหนึ่งของการทดสอบ Junit ขั้นตอนการเริ่มต้นจะใช้เวลาประมาณ 15 วินาที แทนที่จะเป็นความเร็วทันทีของแอปแบบสแตนด์อโลน ไม่นานนัก แต่ถ้าฉันวางแผนที่จะทำการทดสอบหลายสิบครั้ง มันก็จะรวมกัน
ตาม JVisualVM ในครั้งนี้มีการแพร่กระจายออกไปมากกว่าครึ่งโหล ไม่มีวิธีใดที่ใช้เวลานานกว่า 14% ของเวลา CPU (นี่คือหลังจากที่ฉันปรับวิธีการที่ใช้ CPU 50% ให้เหมาะสม) วิธีการทั้งหมดที่ทำงานอยู่เป็นวิธีการที่ฉันคาดว่าจะเห็นการทำงานและดูเหมือนว่าจะใช้เวลา CPU ทั้งหมดเป็นเปอร์เซ็นต์ที่สมเหตุสมผล ฉันไม่สามารถเปรียบเทียบกับเซิร์ฟเวอร์ที่ใช้งานจริงได้เนื่องจากเซิร์ฟเวอร์ที่ใช้งานจริงเริ่มต้นเร็วมาก ฉันไม่สามารถเริ่มและหยุด JVisualVM ได้เร็วพอที่จะสร้างโปรไฟล์ได้ ดูเหมือนว่าเมธอด init ของอ็อบเจ็กต์ทั้งหมดของฉันอาจใช้เวลานานกว่านั้น เช่น อ็อบเจ็กต์หนึ่งใช้ cpu 3% สำหรับ init แต่มีเวลาในตัวเอง 000 ms และไม่มีการโทรอื่น ๆ แต่ฉันไม่รู้ว่านั่นเป็นผลลัพธ์ทั่วไปที่ใช้ JVisualVM หรือไม่
แม้ว่าจะไม่สำคัญว่าฉันกำลังทำสิ่งหนึ่งที่แตกต่างออกไปใน Junit ของฉันเทียบกับการทำงานเป็นแอปแบบสแตนด์อโลน ฉันใช้วัตถุ serverMock (แม้ว่าจะแทบจะไม่ใช่ ATM จำลองก็ตาม) มันขยายวัตถุเซิร์ฟเวอร์ของฉัน ขณะนี้เหตุผลเดียวที่จะขยายเป็นเพราะวิธีการรันของเซิร์ฟเวอร์ (ซึ่งรันอย่างไม่มีกำหนดเพื่อรอข้อความขาเข้า) เป็นวิธีการป้องกันที่ถูกเรียกโดยเมธอด main() เมื่อเซิร์ฟเวอร์ทำงานเป็น jar การเยาะเย้ยของฉันเพิ่มวิธีการที่จะสร้างเธรดเพื่อเรียกใช้วิธีการรันของเซิร์ฟเวอร์เนื่องจากฉันไม่มีวิธีอื่นในการเริ่มวิธีการในการทดสอบหน่วย อย่างไรก็ตาม การชะลอตัวนั้นอยู่ในการเริ่มต้นของเซิร์ฟเวอร์ก่อนที่จะถึงวิธีการเรียกใช้ เลยไม่คิดว่านี่คือสาเหตุของการชะลอตัวใช่ไหม?