โดยทั่วไป Elapsed Time (เวลาที่ผ่านไป) คือเวลาจากจุดเริ่มต้นจนถึงจุดสิ้นสุดของเหตุการณ์ ใน Java วัดได้หลายวิธี
ใช้ System.nanoTime()
เมธอด nanoTime() คืนค่าเวลาปัจจุบันในหน่วยนาโนวินาที เหมาะสำหรับวัดระยะเวลาสั้นๆ ที่ต้องการความแม่นยำสูง
ขั้นตอน
- บันทึกเวลาเริ่มต้นด้วย
System.nanoTime() - รันเมธอดหรือโค้ดที่ต้องการวัด
- บันทึกเวลาสิ้นสุดด้วย
System.nanoTime() - คำนวณความต่าง (end - start)
ตัวอย่างโค้ด
public class Example {
public void test() {
int num = 0;
for (int i = 0; i <= 50; i++) {
num = num + i;
System.out.print(num + ", ");
}
}
public static void main(String args[]) {
// เวลาเริ่มต้น
long begin = System.nanoTime();
// เรียกใช้เมธอดที่ต้องการวัด
new Example().test();
// เวลาสิ้นสุด
long end = System.nanoTime();
// คำนวณเวลาที่ผ่านไป
long time = end - begin;
System.out.println();
System.out.println("Elapsed Time: " + time + " nanoseconds");
}
}
ผลลัพธ์
0, 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, 66, 78, 91, 105, 120, 136, 153, 171, 190, 210, 231, 253, 276, 300, 325, 351, 378, 406, 435, 465, 496, 528, 561, 595, 630, 666, 703, 741, 780, 820, 861, 903, 946, 990, 1035, 1081, 1128, 1176, 1225, 1275, Elapsed Time: 1530200 nanoseconds
ข้อควรระวัง
- nanoTime() ไม่ใช่เวลาจริง (wall-clock time) - เป็นเวลาจากจุดอ้างอิงที่ไม่ระบุ (JVM startup) ใช้ได้เฉพาะวัดความต่าง
- ไม่ควรใช้เปรียบเทียบค่า nanoTime() กับเวลาจริงหรือระหว่าง JVM ต่างกัน
- ความละเอียดขึ้นอยู่กับระบบปฏิบัติการและฮาร์ดแวร์
การแปลงหน่วย
long nanos = end - begin;
long micros = nanos / 1_000;
long millis = nanos / 1_000_000;
double seconds = nanos / 1_000_000_000.0;
System.out.println("Microseconds: " + micros);
System.out.println("Milliseconds: " + millis);
System.out.println("Seconds: " + seconds);