Core Java & Eşzamanlılık
JVM'in içinde ne olduğunu gör
Bellek modeli, collections, Stream API, thread'ler, virtual thread'ler ve garbage collection. JVM'in içine en derin inilen alan.
32 ders 287 dk toplam süre Sertifikan
Bu konunun dersleri şu çalışma yollarında: Adım Adım Backend (25) , Derin Sular (5) , Üretimde Ayakta Kalmak (4)
Başlangıç
- 1/3 yıldız2/3 yıldız3/3 yıldız Stack, Heap ve Pass-by-Value Java bir metoda değişkenin kendisini değil, kopyasını verir. Nesnelerde kopyalanan şey adres olduğu için nesnenin içini değiştirebilirsin, ama çağıranın değişkenini başka bir nesneye çeviremezsin. 9 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız String — Hiç Değişmeyen Metin Bir String oluşturulduktan sonra hiç değişmez; her 'değişiklik' yeni bir String üretir. Metinleri equals ile karşılaştırırsın, döngüde metin biriktirirken de StringBuilder kullanırsın. 8 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız final ve static — Kilitli Olan ve Ortak Olan static bir alan sınıfın tüm nesneleri arasında tek bir ortak kopyadır. final ise bir değişkene yalnızca bir kez atama yapılabileceğini söyler; gösterdiği nesnenin içini dondurmaz. 8 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız HashMap, equals ve hashCode HashMap bir şeyi iki soruyla bulur: hangi kutuya bakayım (hashCode) ve bu kutudakilerden hangisi (equals). İkisini birlikte yazmazsan koyduğunu bulamazsın, anahtarı sonradan değiştirirsen de kaybedersin. 10 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Comparable ve Comparator — Kim Önce Gelir? Comparable bir sınıfın kendi doğal sırasını söyler, Comparator ise dışarıdan istediğin kadar farklı sıra tanımlar. Sıralarken iki kuralı zincirleyebilir, metinleri dile uygun sıralamak için Collator kullanırsın. 8 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız BigDecimal — Parada Kuruş Kaybetmemek double ondalık sayıları yaklaşık tutar, bu yüzden para hesabında kuruş kaçırır. BigDecimal her haneyi tam tutar; onu metinden kurar, bölerken yuvarlama kuralını söyler ve karşılaştırırken compareTo kullanırsın. 8 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Enum — Sabit Bir Seçenek Listesi enum, bir değerin alabileceği seçenekleri baştan sayar: yazım hatası derlenmez, switch eksik seçeneği yakalar. Enum aslında bir sınıftır; alan ve metot taşıyabilir. Veritabanına sırasını değil adını yazarsın. 8 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız int ve Integer — Kutulu ve Kutusuz Sayılar int sayının kendisi, Integer ise onun nesne kutusudur. Java ikisi arasında kendiliğinden çevirir; boş kutuyu açmak NullPointerException verir, == ise 127'den sonra şaşırtır. 8 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Optional'ı Doğru Kullanmak — Yokluğu Tipe Yazmak Optional, 'bu metot bazen eli boş döner' demenin kibar yoludur. Zincir kurarsan her adımdaki boşluğu kendisi taşır. Dikkat: orElse'e verdiğin yedek her seferinde hazırlanır, orElseGet'inki yalnızca gerekince. 8 dk
Orta
- 1/3 yıldız2/3 yıldız3/3 yıldız Koleksiyonların İçi — ArrayList, LinkedList ve Iterator ArrayList numaralı koltuklara benzer: istediğine hemen gidersin ama başa birini sokmak herkesi kaydırır. LinkedList el ele tutuşan bir zincirdir: araya girmek kolay, birini bulmak uzun yürüyüş. 8 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Exception Yönetimi — Hata Yukarı Çıkarken Ne Kaybolur Hatayı yakalamak kolay, doğru yakalamak zor. Boş bir catch hatayı sessizce yutar, sebebini eklemeden sarmak izi siler, finally içinde yanlış kapatılan bir kaynak da asıl hatanın üstünü örter. 8 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Generics ve Type Erasure — Derleyicinin Bildiği, JVM'in Unuttuğu Her elma bir meyvedir ama elma sepeti bir meyve sepeti değildir. Java da List<Integer>'ı List<Number> yerine kabul etmez. Wildcard bu katılığı esnetir; program çalışırken ise tip bilgisi hiç kalmaz. 8 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Lambda ve Fonksiyonel Arayüzler — Lambda Neyi Yakalar? Lambda, tek işi olan bir arayüzü kısa yoldan yazmaktır. Kullandığı yerel değişkenin fotoğrafını çeker, bu yüzden o değişken sonradan değişmemeli. int[] hilesiyle derleyiciyi susturmak sorunu çözmez, saklar. 8 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Zaman ve Saat Dilimleri — Havale Hangi Güne Yazılır? ✦ yeni Bir an tek bir noktadır ama her şehrin duvar saati onu başka gösterir. Anı Instant olarak saklarsın, saat dilimini yalnızca gösterirken uygularsın. Ofset bir sabit değildir: yaz saatiyle değişir. 9 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Annotation ve Reflection — Spring'in Sihri Nasıl Çalışır? Annotation sınıfa yapıştırılmış bir nottur ve kendi başına hiçbir şey yapmaz. Reflection, programın çalışırken kendi sınıflarına bakıp bu notları okumasıdır; Spring'in bütün 'sihri' bu ikisinin birleşimidir. 9 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Stream API ve Tembellik Stream aşama aşama değil, eleman eleman çalışır: her eleman zincirin tamamından tek başına geçer. İşlemlerin sırasının önemi ve akışın erken durabilmesi buradan gelir. 10 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Java 8'den 21'e — Her Özellik Bir Hata Sınıfı Java'nın yeni özellikleri sadece yazıyı kısaltmıyor, derleyicinin senin yerine hata yakalamasını sağlıyor. record, sealed ve pattern matching'in her biri bir hata türünü ortadan kaldırıyor. 10 dk
İleri
- 1/3 yıldız2/3 yıldız3/3 yıldız Race Condition ve Görünürlük İki thread aynı sayacı artırınca bazı artışlar kaybolur, çünkü count++ tek adım değildir. volatile bunu düzeltmez: kayıp artış ve bayat okuma iki ayrı sorundur. 10 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Concurrency Araçları — Executor, Lock, Atomic ve Deadlock Thread açmak yerine işi bir havuza ver, kilidi mutlaka finally'de bırak, tek değişken için Atomic kullan. İki kilit gerekiyorsa hep aynı sırayla al; yoksa iki iş birbirini sonsuza kadar bekler. 9 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız ConcurrentHashMap — Güvenli Map, Güvensiz Sayaç ConcurrentHashMap her çağrıyı tek tek güvenli yapar, iki çağrıdan kurduğun işi değil. get ile put arasına başka bir thread girer ve artışlar kaybolur. Çözüm: işi merge ya da compute ile tek çağrıya indirmek. 9 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Virtual Threads vs Platform Threads Virtual thread daha hızlı değil, beklerken daha ucuz. Veritabanı ya da ağ cevabı beklerken altındaki gerçek thread'i bırakır; kazanç hafiflikten değil, buradan gelir. 10 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Java Memory Model ve Yeniden Sıralama Bilgisayar yazdığın satırları her zaman yazdığın sırayla görünür kılmaz. Bu yüzden iki thread'in de ötekinin yazdığını görmediği, programa bakınca imkânsız görünen bir sonuç gerçekten çıkabilir. 10 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız ThreadLocal ve ScopedValue — Havuzdaki Thread Neyi Hatırlıyor? ThreadLocal her thread'e özel bir çekmece verir. Havuzdaki thread ise istekten isteğe geçer ve çekmeceyi kendisi boşaltmaz; remove() unutulursa bir kullanıcının bilgisi ötekine kalır. 9 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Bellek Sızıntısı ve Referans Türleri — GC Neyi Bırakabilir? ✦ yeni Java'da çöp toplayıcı var ama sızıntı da var: kullanılmayan bir nesneye hâlâ ulaşılabiliyorsa GC onu bırakamaz. Zayıf ve yumuşak referanslar GC'ye 'bunu atabilirsin' demenin yolu; sınırlı bir cache ise en sağlamı. 10 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Prod'da Teşhis — Heap Dump, Thread Dump ve İlk On Beş Dakika Servis yavaşladığında önce belirtiye bakılır: bellek mi tırmanıyor, CPU mu yanıyor, thread'ler bir şey mi bekliyor? Her belirtinin bir aracı var. Kanıt, yeniden başlatmadan önce toplanır. 10 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız JVM Konteynerde — Bellek Sınırı Heap'ten Büyüktür ✦ yeni Konteynerin bellek sınırı bütün süreci sayar: heap, metaspace, thread yığınları ve native bellek. Heap'e sınırın tamamını verirsen süreç sessizce öldürülür; hiç ayar vermezsen heap dörtte birde kalır. 10 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız JMH ile Doğru Ölçüm — Sayıya Güvenmeden Önce ✦ yeni Elle yazılmış bir zamanlama döngüsü çoğu zaman ölçmek istediğin şeyi ölçmez: ısınmayı, silinmiş bir hesabı ya da bir sabiti ölçer. JMH bu tuzakları düzenler; sonucu okurken de hata payına bakılır. 9 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız JVM Konteynerde CPU — Ortalama Düşük, İstek Neden Yavaş? ✦ yeni Konteynerin CPU limiti, her 100 ms'lik dilimde bütün thread'lerin paylaştığı bir zaman kotasıdır. Kısa anda çok çekirdek kullanan iş kotayı erken bitirip bekler; ortalama CPU düşük görünürken istekler yavaşlar. 8 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız JDK 8'den 21'e Geçiş — Derleme Yeşil, Rapor Sunucusu Neden Açılmadı? ✦ yeni Çok modüllü bir projeyi JDK 21'e taşırken üç ayrı şey kırılır: ortak modül eski sunucunun okuyamadığı sürümde derlenir, JDK'dan çıkan JAXB gibi parçalar eksik kalır, iç API'lere uzanan eski kütüphaneler durur. 10 dk
Uzman
- 1/3 yıldız2/3 yıldız3/3 yıldız CompletableFuture ve Structured Concurrency Üç işi aynı anda başlattın ve biri patladı. allOf diğer ikisini durdurmaz, onlar boşuna çalışmaya devam eder. Structured concurrency tam olarak bu dağınıklığı toplamak için var. 10 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Garbage Collection — Üçlü Takas Çöp toplayıcı seçmek bir takas: çok iş, kısa duraklama ve az bellek aynı anda olmaz. En kısa duraklayan toplayıcı en az iş çıkaranıdır; bunu söylemeyen her karşılaştırma eksiktir. 9 dk
- 1/3 yıldız2/3 yıldız3/3 yıldız Sınıf Yükleme ve JIT — Uygulama Neden Isınır? JVM kodu önce satır satır okur, sık çalışanı zamanla hızlı makine koduna çevirir; tahmini yanlış çıkarsa geri döner. Yeni sürüm yayına alınınca ilk dakikalardaki yavaşlığın sebebi bu ısınmadır. 9 dk