Java Academy · Pelajaran

Pemanasan dan Lelaran

Ukur prestasi keadaan mantap

Pelajaran 3 daripada 413 langkah

Pemanasan dan Lelaran ialah pelajaran Java Academy percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Java Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Java Academy merangkumi sejumlah 4 pelajaran.

Pemanasan dan Lelaran

JMH mengukur prestasi keadaan mantap: kelajuan yang dicapai oleh kod Anda selepas JVM mengoptimumkannya sepenuhnya. Untuk berbuat demikian, JMH menjalankan lelaran pemanasan sementara terlebih dahulu, kemudian lelaran pengukuran sebenar. Pelajaran ini merangkumi pelarasan kedua-duanya.

Mengapa Perlu Memanaskan

Pemanggilan awal berjalan dalam mod tafsiran dan perlahan; selepas JIT menyusun kaedah panas, panggilan menjadi jauh lebih pantas. Memasukkan permulaan yang perlahan ke dalam nombor Anda akan membesarkannya. Lelaran pemanasan melaksanakan kod tersebut, tetapi masanya dibuang.

@Warmup

@Warmup mengawal fasa sementara: bilangan lelaran dan tempoh setiap lelaran.

import java.util.concurrent.TimeUnit;
import org.openjdk.jmh.annotations.*;

public class Bench {
    @Benchmark
    @Warmup(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS)
    public int work() {
        return 7 * 6;
    }
}

@Measurement

@Measurement mengawal fasa sebenar yang direkodkan. Lebih banyak lelaran mengetatkan selang keyakinan tetapi memanjangkan pelaksanaan.

import java.util.concurrent.TimeUnit;
import org.openjdk.jmh.annotations.*;

public class Bench {
    @Benchmark
    @Measurement(iterations = 10, time = 1, timeUnit = TimeUnit.SECONDS)
    public int work() {
        return 7 * 6;
    }
}

Lelaran berbanding Operasi

Berhati-hati dengan istilah ini. Lelaran ialah tempoh bermasa, contohnya satu saat. Dalam setiap tempoh, JMH memanggil kaedah penanda aras sebanyak mungkin; setiap panggilan ialah satu operasi. Skor dilaporkan bagi setiap operasi.

Berapa Banyak Pemanasan yang Mencukupi

Perhatikan keluaran bagi setiap lelaran. Apabila lelaran pemanasan berturutan tidak lagi berubah, JIT telah stabil. Jika beberapa lelaran pengukuran pertama masih berubah, tambahkan pemanasan. Lima lelaran pemanasan dan sepuluh lelaran pengukuran ialah titik permulaan yang biasa.

Proses Berasingan Menambah Pemanasan

Setiap proses ialah JVM yang benar-benar baharu, jadi setiap proses mengulangi pemanasan penuh. Menjalankan beberapa proses mengasingkan profil JIT dan memberikan varians merentas JVM, iaitu ukuran kestabilan yang paling jujur.

import org.openjdk.jmh.annotations.*;

@Fork(3)
@Warmup(iterations = 5)
@Measurement(iterations = 10)
public class Bench {
    @Benchmark
    public double sqrt() {
        return Math.sqrt(2.0);
    }
}

Menunjukkan Kesannya

Gelung Java biasa ini mencetak masa bagi setiap kelompok. Anda sering akan melihat kelompok pertama berjalan lebih perlahan daripada kelompok berikutnya apabila JIT menyusun kaedah tersebut — tepat seperti kesan yang dibuang oleh pemanasan.

public class Main {
    static long busy(int n) {
        long s = 0;
        for (int i = 0; i < n; i++) s += (long) Math.sqrt(i);
        return s;
    }
    public static void main(String[] args) {
        for (int batch = 0; batch < 5; batch++) {
            long t = System.nanoTime();
            long r = busy(2_000_000);
            System.out.println("batch " + batch + ": "
                + (System.nanoTime() - t) / 1000 + " us, r=" + r);
        }
    }
}

Berasaskan Masa berbanding Berasaskan Bilangan

Secara lalai, lelaran adalah berasaskan masa (berjalan selama N saat). Anda boleh bertukar kepada bilangan operasi tetap dengan batchSize dan mod satu proses, tetapi berasaskan masa ialah kebiasaan kerana ia menyesuaikan diri dengan kelajuan mesin.

Jangan Melaras Berlebihan

Pelaksanaan yang sangat lama menggunakan masa tanpa meningkatkan ketepatan dengan banyak selepas keadaan mantap dicapai. Sasarkan nombor yang stabil dan boleh diulangi merentas proses, bukannya memaksimumkan bilangan lelaran. Kebolehulangan lebih penting daripada satu angka yang mengagumkan.

Membaca Penstabilan

JMH mencetak skor bagi setiap lelaran semasa pelaksanaan. Penanda aras yang sihat menunjukkan lelaran pemanasan yang semakin menghampiri nilai tetap dan lelaran pengukuran yang berkumpul rapat di sekitar skor akhir dengan ralat +/- yang kecil.

Semakan Pantas

Uji pemahaman Anda tentang pemanasan dan lelaran.

Imbas Kembali

Anda telah belajar mengukur prestasi keadaan mantap:

  • @Warmup menjalankan lelaran yang dibuang supaya JIT boleh menyusun kod.
  • @Measurement menjalankan lelaran yang direkodkan; jumlah yang lebih banyak mengetatkan julat ralat.
  • Satu lelaran ialah tempoh bermasa; setiap panggilan di dalamnya ialah satu operasi.
  • Beberapa @Fork mengulangi pemanasan dalam JVM baharu dan mendedahkan varians merentas JVM.
  • Sasarkan skor yang boleh diulangi dan stabil, bukannya tempoh pelaksanaan maksimum.
Percuma untuk bermula

Pelajari Java dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
104
Pelajaran
374

Soalan Lazim

Adakah pelajaran “Pemanasan dan Lelaran” percuma?

Ya — teks penuh “Pemanasan dan Lelaran” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Java Academy, tingkat taraf kepada CoddyKit PRO. Kursus Java Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Pemanasan dan Lelaran”?

Ukur prestasi keadaan mantap Anda berlatih Java Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Java Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Java Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.

Berapa lamakah pelajaran “Pemanasan dan Lelaran” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Java Academy ini?

Ya. Setiap pelajaran Java Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Mengapa JMH
  2. Menulis Penanda Aras
  3. Pemanasan dan Lelaran
  4. Mengelakkan Penghapusan Kod Mati
← Kembali ke Java Academy