0Pricing
Java Academy · Ders

Darboğazları Belirleme

Eniyilemeden önce ölçün

Darboğazları Belirleme, 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.

Ölçün, Tahmin Etmeyin

Performans çalışmalarının ilk kuralı: iyileştirmeden önce ölçün.

Bir Java programının zamanını nerede harcadığına dair sezgiler genellikle yanlıştır. JIT derleyicisi, çöp toplayıcı ve önbelleğe alma, tahminleri boşa çıkarır. Profil çıkarın, gerçek sıcak noktayı bulun ve onu düzeltin.

Darboğazın Tanımı

Darboğaz, sistemin genel işlem hacmini veya gecikmesini sınırlayan bölümüdür.

Başka bir şeyi iyileştirmenin gözle görülür bir faydası olmaz. Amdahl Yasası bunu kesin biçimde açıklar: zamanın yüzde 90'ı tek bir yöntemde harcanıyorsa, kalan yüzde 10'u hızlandırmak hiçbir zaman yüzde 11'den fazla iyileşme sağlayamaz.

Gecikme ve İşlem Hacmi

Neyi iyileştirdiğinize karar verin:

  • Gecikme — tek bir isteğin ne kadar sürdüğü.
  • İşlem hacmi — saniyede kaç istek işlendiği.

Bunlar arasında ödünleşim vardır. Toplu işleme, işlem hacmini artırabilir ancak istek başına gecikmeyi yükseltebilir. Ayarlama yapmadan önce hedefinizi bilin.

Gerçek Geçen Süreyi Ölçme

En kaba ölçüm, bir kod bloğunun çevresinde System.nanoTime() ile gerçek geçen süreyi ölçmektir.

Bu, hızlı bir makullük kontrolü için kullanışlıdır; ancak JIT ısınmasını, GC duraklamalarını ve OS zamanlamasından kaynaklanan gürültüyü içerir. Bu nedenle tekil ölçümlere şüpheyle yaklaşın.

public class Main {
    public static void main(String[] args) {
        long start = System.nanoTime();
        long sum = 0;
        for (int i = 0; i < 10_000_000; i++) sum += i;
        long elapsed = System.nanoTime() - start;
        System.out.println("Sum: " + sum);
        System.out.println("Elapsed ms: " + (elapsed / 1_000_000.0));
    }
}

JIT Isınmasına Dikkat Edin

Java, bayt kodunu yorumlayarak başlar; ardından JIT sıcak yöntemleri yerel koda derler.

Bu nedenle bir yöntemin ilk çalıştırmaları, sonraki çalıştırmalardan çok daha yavaştır. Naif bir zaman ölçümü döngüsü çoğunlukla ısınma süresini ölçer. Gerçek karşılaştırmalar önce ısınır, ardından kararlı durumu ölçer; JMH bunu sizin için tam olarak yapar.

CPU ile Sınırlı ve IO ile Sınırlı

Darboğazı sınıflandırın:

  • CPU ile sınırlı — iş parçacıkları hesaplama yapmakla meşguldür; çekirdekler tamamen kullanılır.
  • IO ile sınırlı — iş parçacıkları disk, ağ veya veritabanı üzerinde bekler.

Profil oluşturucular bunları 'CPU üzerinde' ve 'engellenmiş/bekleyen' süre olarak birbirinden ayırır. Çözüm tamamen farklıdır: daha hızlı algoritmalar ya da daha fazla eşzamanlılık veya daha az gidiş-dönüş.

Örnekleme ve Enstrümantasyon

İki profil oluşturma stratejisi vardır:

  • Örnekleme — yığın izlerini belirli aralıklarla yakalar. Ek yükü düşüktür ve istatistikseldir.
  • Enstrümantasyon — her yönteme sayaçlar ekler. Kesindir; ancak ağırdır ve zaman ölçümlerini bozabilir.

Üretim ortamında Java Flight Recorder gibi ek yükü düşük örnekleme yöntemlerini tercih edin.

Bellek Darboğaz Olarak

Gerçek maliyet çoğu zaman hesaplama değil, bellek ayırmadır. Gereğinden fazla nesne oluşturma trafiği, sık çöp toplamayı tetikler; bu da CPU tüketir ve duraklamalara neden olur.

Bellek ayırma hızını ve GC süresini izleyin. Sık çalıştırılan bir döngüde bellek ayırmayı azaltmak, aritmetiği mikro düzeyde ayarlamaktan çoğu zaman daha iyi sonuç verir.

import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        // Allocation-heavy: a new String each iteration
        List<String> garbage = new ArrayList<>();
        for (int i = 0; i < 5; i++) {
            garbage.add("item-" + i);
        }
        System.out.println("Allocated " + garbage.size() + " strings");
        System.out.println("In a hot loop, this churn drives GC pressure");
    }
}

Yığının En Üstünü Bulun

Bir örnekleme profil oluşturucusu, CPU yığınında ne sıklıkta göründüklerine göre sıralanmış yöntemlerin bir listesini üretir; bu değer öz süredir.

En üstteki yöntem adayınızdır. Ancak kritik yol üzerinde olduğunu doğrulayın: arka planda çalışan bir günlükleyicideki yoğun yöntem, kullanıcıya yansıyan gecikmeyi etkilemeyebilir.

Temel Ölçümü Belirleyin

Herhangi bir şeyi değiştirmeden önce gerçekçi bir yük altında temel ölçümü kaydedin.

Her değişiklikten sonra yeniden ölçüm yapıp karşılaştırın. Temel ölçüm olmadan bir iyileştirmenin fayda sağladığını kanıtlayamazsınız; ayrıca birçok 'iyileştirme' işleri daha kötü hâle getirir. Her seferinde tek bir şeyi değiştirin.

Gerçekçi Yükte Profil Oluşturma

Boşta duran bir dizüstü bilgisayarda bulunan bir darboğaz, üretimde sorun çıkaran darboğaz olmayabilir.

  • Temsili veri boyutlarını ve eşzamanlılık düzeyini kullanın.
  • Kullanıcılar için gerçekten önemli olan iş yükünü yeniden oluşturun.

Sentetik mikro sınamalar, ölçek büyüdüğünde önemsiz kalan bir yönteme yönlendirebilir. Sorunun gerçekten yaşandığı yeri profilleyin.

Hızlı Kontrol

Tek tek ve safça yapılan System.nanoTime() ölçümleri bir Java yönteminde neden çoğu zaman yanıltıcıdır?

Özet

Darboğazları disiplinli biçimde bulma:

  • İyileştirmeden önce ölçün; sezgi yanıltır.
  • Bir hedef seçin: gecikme veya işlem hacmi.
  • CPU-bağımlı mı yoksa IO-bağımlı mı sınıflandırın; çöp toplama ve bellek ayırmayı izleyin.
  • Düşük ek yük oluşturan örnekleme profillerini tercih edin.
  • Tam zamanında derleme ısınmasına dikkat edin; bir başlangıç ölçümü oluşturun ve her seferinde tek bir şeyi değiştirin.

Sıkça Sorulan Sorular

“Darboğazları Belirleme” dersi ücretsiz mi?

Evet — “Darboğazları Belirleme” 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.

“Darboğazları Belirleme” dersinde ne öğreneceğim?

Eniyilemeden önce ölçü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.

“Darboğazları Belirleme” 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. Darboğazları Belirleme
  2. Java Flight Recorder
  3. JDK Mission Control ile Analiz
  4. Yaygın JVM Ayarlama Bayrakları
← Java Academy Sayfasına Dön