0Pricing
Java Academy · Ders

JMH Neden Kullanılır

Saf benchmark hatalarından kaçının

JMH Neden Kullanılır, CoddyKit'te ücretsiz bir Java Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Java Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Java Academy kursu toplamda 4 dersten oluşur.

JMH Neden Kullanılır

Java Mikrobenchmark Çatısı (JMH), küçük Java kod parçalarının performansını ölçmek için kullanılan standart araçtır. Elle yazılmış zamanlama döngüleri neredeyse her zaman yanlış sonuçlar üretir; çünkü JVM, gelişmiş bir optimizasyon çalışma ortamıdır.

JMH bu tuzakları etkisiz hâle getirmek için vardır.

Naif Performans Ölçümü

Tipik ilk denemede bir döngü System.nanoTime() ile sarılır. Bu yaklaşım makul görünse de mikro ölçümler için temel kusurlar içerir.

public class Main {
    static int compute(int n) { return n * n + 7; }
    public static void main(String[] args) {
        long start = System.nanoTime();
        int sink = 0;
        for (int i = 0; i < 1_000_000; i++) sink = compute(i);
        long elapsed = System.nanoTime() - start;
        System.out.println("ns: " + elapsed + " sink=" + sink);
    }
}

1. Sorun: JIT Isınması

JVM, yorumlanan kipte başlar ve yalnızca yoğun kullanılan yöntemleri binlerce çağrıdan sonra yerel koda derler. Naif bir performans ölçümü, yavaş yorumlanan aşama ile hızlı derlenmiş aşamayı birlikte ölçerek anlamsız ortalamalar verir.

JMH bu sorunu, sonuçları dikkate alınmayan özel bir ısınma aşamasıyla çözer.

2. Sorun: Ölü Kod Kaldırma

Hesaplanan bir sonuç hiç kullanılmıyorsa JIT, hesaplamanın tamamını silebilir. Bu durumda performans ölçümünüz boş bir döngüyü ölçer.

JMH bunu engellemek için dönüş değeri tüketimini ve Blackhole sınıfını sunar.

3. Sorun: Sabit Katlama

Girdiler derleme zamanında sabitse JIT, yanıtı bir kez hesaplayıp yeniden kullanır. Aşağıda derleyici, döngünün tamamını tek bir sabitle değiştirebilir.

JMH, girdilerin eniyileyici için opak olmasını sağlamak üzere @State nesnelerini kullanır.

public class Main {
    public static void main(String[] args) {
        // 2 * 21 is constant; the JIT folds it to 42
        int result = 2 * 21;
        System.out.println(result);
    }
}

4. Sorun: Döngü Optimizasyonları

JIT döngüleri açar, değişmez kodu döngü dışına taşır ve işlemleri vektörleştirir. Elle yazılmış bir döngü, ölçmeyi amaçladığınız işlem yerine bu optimizasyonları ölçer.

JMH, döngünüzü kendi yönettiği, dikkatle denetlenen yineleme sayılarıyla değiştirir.

5. Yığın Üzerinde Değiştirme

main içindeki uzun süre çalışan bir döngü yürütme sırasında derlenebilir (yığın üzerinde değiştirme); bu da normal biçimde derlenmiş bir yöntemden farklı performans özellikleri üretir. Bu durum sonuçları öngörülemez biçimde çarpıtır.

JMH Ne Sağlar

  • Ayrı ve sonuçları dikkate alınmayan ısınma yinelemeleri.
  • İstatistiklerle birlikte birden çok ölçüm yinelemesi.
  • Profil kirlenmesini önlemek için yeni JVM'lerde çatallama.
  • Ölü kod kaldırmaya karşı Kara Delik ve sonuç tüketimi.
  • Sabit katlamayı engellemek için @State nesneleri.

Nasıl Çalıştırılır

JMH ayrı bir bağımlılıktır (org.openjdk.jmh) ve genellikle bir ek açıklama işleyicisi ile çalıştırılabilir bir JAR üreten Maven/Gradle derlemesi aracılığıyla başlatılır. Performans ölçümlerini sıradan kodlar gibi doğrudan bir main içinden çalıştırmazsınız.

İstatistikler Önemlidir

JMH yalnızca bir ortalama değil, yinelemeler ve çatallamalar arasındaki hata / güven aralığını da raporlar. 42.0 +/- 1.3 ns/op sonucu hem merkezi değeri hem de ne kadar değiştiğini gösterir; bu da bir ölçüme güvenmek için gereklidir.

JMH'ye Ne Zaman Başvurulmalı

Yoğun kullanılan bir yolun iki uygulamasını karşılaştırırken, bir optimizasyonu doğrularken veya nanosaniye ile mikrosaniye arasındaki işlemleri ölçerken JMH kullanın. Girdi/çıktı ve ağ işlemleri gibi saniyeler süren işler için gerçek geçen süreyi ölçmek genellikle yeterlidir.

Kısa Kontrol

JMH'nin neden gerekli olduğu konusundaki kavrayışınızı sınayın.

Özet

Mikro ölçümlerin neden bir çatıya ihtiyaç duyduğunu öğrendiniz:

  • JVM ısınır: yorumlanan kod, ancak çok sayıda çağrıdan sonra derlenmiş hâle gelir.
  • Ölü kod kaldırma ve sabit katlama, yaptığınız işi silebilir veya önceden hesaplayabilir.
  • Döngü optimizasyonları ve yığın üzerinde değiştirme, elle yazılmış döngüleri çarpıtır.
  • JMH; ısınma, ölçüm yinelemeleri, çatallama, Kara Delik ve istatistikler ekler.
  • Nanosaniye ölçeğindeki yoğun kullanılan yolları ölçerken JMH'ye başvurun.

Sıkça Sorulan Sorular

“JMH Neden Kullanılır” dersi ücretsiz mi?

Evet — “JMH Neden Kullanılır” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Java Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Java Academy kursu toplamda 4 dersten oluşur.

“JMH Neden Kullanılır” dersinde ne öğreneceğim?

Saf benchmark hatalarından kaçının Java Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Java Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Java Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.

“JMH Neden Kullanılır” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Java Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Java Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. JMH Neden Kullanılır
  2. Benchmark Yazma
  3. Isınma ve Yinelemeler
  4. Ölü Kodun Elenmesinden Kaçınma
← Java Academy Sayfasına Dön