Menulis Benchmark
@Benchmark dan mode.
Menulis Benchmark adalah pelajaran Java Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Java Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Java Academy mencakup 4 pelajaran total.
Menulis Tolok Ukur
Tolok ukur JMH hanyalah metode yang diberi anotasi @Benchmark di dalam kelas biasa. Pemroses anotasi JMH membuat kerangka kerja di sekelilingnya. Pelajaran ini membahas anotasi yang menentukan apa dan bagaimana Anda mengukur.
Anotasi @Benchmark
Tandai metode publik apa pun dengan @Benchmark, dan JMH akan memanggilnya berulang kali sambil mengukur waktu setiap pemanggilan. Nilai kembalian metode harus dikembalikan (bukan dibuang) agar dapat digunakan oleh JMH.
Kelas Tolok Ukur Minimal
Berikut bentuk sebuah tolok ukur. Impornya adalah org.openjdk.jmh.annotations.*. Karena JMH tidak tersedia di jalur kelas pelaksana ini, contoh tersebut hanya bersifat ilustratif.
import org.openjdk.jmh.annotations.Benchmark;
public class StringBench {
@Benchmark
public String concat() {
return "foo" + System.nanoTime();
}
}Mode Tolok Ukur
@BenchmarkMode memilih hal yang dilaporkan:
- Laju operasi — operasi per satuan waktu (lebih tinggi lebih baik).
- AverageTime — waktu per operasi (lebih rendah lebih baik).
- SampleTime — distribusi waktu (persentil).
- SingleShotTime — satu pemanggilan, cocok untuk awal dingin.
import org.openjdk.jmh.annotations.*;
public class Bench {
@Benchmark
@BenchmarkMode(Mode.AverageTime)
public int work() {
return 2 + 2;
}
}Memilih Satuan Keluaran
@OutputTimeUnit menetapkan satuan waktu untuk laporan agar angkanya mudah dibaca. Untuk operasi cepat, nanodetik sesuai digunakan; untuk operasi lambat, gunakan milidetik.
import java.util.concurrent.TimeUnit;
import org.openjdk.jmh.annotations.*;
public class Bench {
@Benchmark
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
public int work() {
return 42;
}
}Mengembalikan Hasil
Selalu kembalikan hasil pekerjaan. JMH secara otomatis memasukkan setiap nilai kembalian ke dalam lubang hitam, sehingga mencegah penghapusan kode mati. Tolok ukur void yang menghitung lalu membuang hasilnya adalah kesalahan klasik.
Bawaan Anotasi
Anotasi dapat ditempatkan pada metode atau seluruh kelas. Anotasi tingkat kelas berlaku untuk setiap @Benchmark di kelas tersebut, sehingga konfigurasi tetap DRY ketika Anda memiliki beberapa tolok ukur yang saling terkait.
Percabangan
@Fork(n) menjalankan tolok ukur dalam n proses JVM baru. Percabangan mengisolasi setiap proses dari profil JIT yang dibangun oleh tolok ukur sebelumnya, sehingga meningkatkan keterulangan hasil. Bawaannya adalah satu proses percabangan.
import org.openjdk.jmh.annotations.*;
@Fork(2)
public class Bench {
@Benchmark
public long now() {
return System.nanoTime();
}
}Meluncurkan Pelaksana
Anda memulai tolok ukur melalui main yang mengonfigurasi objek Options dan Runner, atau melalui JAR yang dapat dieksekusi dan dihasilkan. Ekspresi reguler include(...) memilih tolok ukur yang akan dijalankan.
import org.openjdk.jmh.runner.Runner;
import org.openjdk.jmh.runner.options.*;
public class Launcher {
public static void main(String[] args) throws Exception {
Options opt = new OptionsBuilder()
.include("Bench")
.build();
new Runner(opt).run();
}
}Membaca Keluaran
JMH mencetak tabel berisi nama tolok ukur, mode, jumlah sampel, skor, galat skor, dan satuan, misalnya: Bench.work avgt 25 3.142 +/- 0.011 ns/op. Tanda +/- adalah interval kepercayaan.
Jaga Fokus Tolok Ukur
Setiap tolok ukur sebaiknya mengukur satu hal. Mencampur penyiapan, I/O, dan operasi yang diuji akan mengaburkan hasil. Pindahkan persiapan ke metode @Setup (yang dibahas bersama status) sehingga hanya jalur panas yang diukur waktunya.
Pemeriksaan Singkat
Uji pemahaman Anda tentang cara menulis tolok ukur.
Ringkasan
Anda telah mempelajari cara menulis tolok ukur JMH:
- Beri anotasi pada metode dengan @Benchmark dan kembalikan hasilnya.
- @BenchmarkMode memilih Laju operasi, AverageTime, SampleTime, atau SingleShotTime.
- @OutputTimeUnit menetapkan satuan yang mudah dibaca; @Fork mengisolasi proses dalam JVM baru.
- Luncurkan dengan pelaksana + opsi atau JAR yang dihasilkan.
- Jaga agar setiap tolok ukur berfokus pada satu jalur panas.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Menulis Benchmark” gratis?
Ya — teks lengkap “Menulis Benchmark” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Java Academy, upgrade ke CoddyKit PRO. Kursus Java Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Menulis Benchmark”?
@Benchmark dan mode. Kamu berlatih Java Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Java Academy?
Tidak diperlukan pengalaman sebelumnya. Java Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Menulis Benchmark” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Java Academy ini?
Ya. Setiap pelajaran Java Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Mengapa JMH
- Menulis Benchmark
- Pemanasan dan Iterasi
- Menghindari Eliminasi Kode Mati