Quantcast
Channel: cc :: somkiat
Viewing all articles
Browse latest Browse all 1997

มาทำ benchmark ของภาษาโปรแกรมบน JVM ด้วย JMH (Java Microbenchmark Harness)

$
0
0

มีคำถามเกี่ยวกับการเขียนโปรแกรมด้วยภาษา Java
ว่าการใช้ for-loop ปกติกับการใช้ Stream API นั้น
อะไรที่มี performance ดีกว่ากัน

ตอบได้เลยว่า for-loop เร็วสุด ๆ
แต่อาจจะต้องมองมุมอื่นด้วย ทั้งเรื่องของ readable, safety, maintain
รวมไปถึงความต้องการของงานต่าง ๆ

แต่เพื่อให้ชัดเจนมาทำ benchmark เพื่อวัดระสิทธิภาพการทำงานดีกว่า

โดยถ้าสาย JVM น่าจะต้องใช้เครื่องมือที่มีให้เลย
คือ JMH (Java Microbenchmark Harness)
จะทำการสร้างชุดการทดสอบ ทดสอบ และวิเคราะห์และสรุปผลให้
เป็นเครื่องมือที่พลาดไม่ได้เลย

โดยที่ JMH ก็เตรียม plugin สำหรับเครื่องมือต่าง ๆ ไว้ให้ครบ 

เช่น

  • Gradle Plugin
  • Scala SBT Plugin
  • IntelliJ IDEA Plugin

ยกตัวอย่าง ผมใช้งานร่วมกับ Gradle

มี code ตัวอย่างดังนี้

[gist id="141f169fdb2651b24f5e1dbff0b5b987" file="Hello.java"]

คำอธิบาย

  • ในทุก ๆ method ที่จะทำการ benchmark จะต้องใส่  annotation ชื่อว่า Benchmark
  • กำหนดให้ทุก ๆ  method วัดความเร็วการทำงานในหน่วน manosecond
  • Mode การ run ใช้แบบค่า average หรือค่าเฉลี่ย

ทำการ run ด้วย Gradle
จะใช้เวลาทดสอบนานใช้ได้เลย ได้ผลการทำงานดังนี้

[gist id="141f169fdb2651b24f5e1dbff0b5b987" file="result.txt"]

คำอธิบาย

  • For-loop แบบปกติทำงานเร็วที่สุด
  • ส่วน Stream แบบ parallel จะรองลงมา

ในส่วนตรงนี้ผมแสดงให้เห็นถึงเครื่องมือในการทำ benchmark ด้วย JMH 
ลองนำไปประยุกต์ใช้งานกันดูได้นะครับ

ส่วน code ตัวอย่างอยู่ที่ GitHub::Up1


Viewing all articles
Browse latest Browse all 1997

Trending Articles