· kaynak dev.to (home feed)
Java 27, yapılandırılmış eşzamanlılığı final haline getirirken kuşaklı ZGC'yi varsayılan yapıyor
Java 27, yapılandırılmış eşzamanlılığı ve switch içinde record deconstruction'ı finalleştiriyor; virtual thread executor'ları ve kuşaklı ZGC'yi varsayılan yapıyor; container boyutunu ve soğuk başlatma sürelerini iyileştiriyor.

dev.io'da yayınlanan bir yazıya göre Java 27, Java'nın altı aylık sürüm treninin Eylül 2026 durağı olarak bu hafta yayınlandı. Bu bir LTS değil, kısa vadeli bir özellik sürümü — uzun vadeli destek hattı şu anda Java 21 ve 25 üzerinden yürüyor, 2028'de Java 29'un gelmesi bekleniyor — dolayısıyla bu sürümün rolü, özellikleri bir sonraki LTS'ye hazırlamak.
Yapılandırılmış eşzamanlılık preview'dan çıkıyor
Java 21'e kadar uzanan birden fazla preview turunun ardından yapılandırılmış eşzamanlılık (structured concurrency) 27'de finalleştirildi; dev.io yazısı bunu sürümün başlık değişikliği olarak konumlandırıyor. Bu API, geliştiricilerin bir scope içinde alt görevler fork etmesini, bunları join etmesini ve hataları yaymasını sağlıyor; böylece başarısız olan bir dal kardeşlerini iptal ediyor, thread sızdırmıyor. Yazar, sonucu Node.js'teki Promise.all'a benzetiyor ve Java'nın sorununun hiçbir zaman eşzamanlılığı ifade etmek değil, eşzamanlı görevlerin yaşam döngüsünü ve hatalarını yönetmek olduğunu — ki kapsamlı modelin tam olarak bunu ele aldığını — savunuyor.
Virtual thread'ler önerilen varsayılan oluyor
Virtual thread'ler Java 21'de stabil olmuştu; dev.io yazısına göre Java 27 artık Executors.newVirtualThreadPerTaskExecutor() metodunu çoğu sunucu framework'ü için önerilen varsayılan olarak konumlandırıyor ve Spring Boot 4.x ile Micronaut'u örnek veriyor. Bunun etkisi, tanıdık bir blocking tarzda yazılan kodun asenkron kod gibi ölçeklenmesi: makale, on bin virtual thread'in megabaytlar değil kilobaytlar kapladığına dikkat çekiyor. Bu, ekiplerin Node'un event loop'una ya da Go'nun goroutine'lerine yönelmesinin ana nedenlerinden birini ortadan kaldırıyor — cezalandırıcı bir bellek ayak izi olmadan istek başına thread kullanımı.
Switch, iç içe record deconstruction kazanıyor
Switch içinde iç içe deconstruction'lı record pattern'lar da, Java 21 ve 22'deki preview'ların ardından finalleştirildi. Makale, iki Point record'u tutan bir Line record'unun tek bir case ifadesinde guard koşuluyla açıldığını gösteriyor ve özelliği, Java'nın TypeScript geliştiricilerinin doğal karşıladığı destructuring'e yetişmesi olarak çerçeveliyor — üstüne bir de derleyici tarafından zorunlu kılınan exhaustiveness kontrolüyle.
Kuşaklı ZGC, kutudan çıkan collector oluyor
Yazıya göre Java 21'de tanıtılan Z Garbage Collector'ın kuşaklı modu, artık açık bir collector ayarlamayan yeni uygulamalar için varsayılan. Java 21'de etkinleştirmek için -XX:+UseZGC -XX:+ZGenerational gerekiyordu; Java 27'de hiçbir flag gerekmiyor ve heap boyutundan bağımsız olarak duraklamalar bir milisaniyenin altında tutuluyor. JVM servislerini Kubernetes'te dar bellek limitleriyle çalıştıran ekipler için yazar, bunun sürümdeki herhangi bir dil özelliğinden daha önemli olduğunu savunuyor.
Daha küçük image'lar ve daha hızlı soğuk başlatmalar
Makale ayrıca deployment konularını da ele alıyor. jlink kullanarak minimal bir özel runtime oluşturan çok aşamalı bir Docker build'i, 300MB'ı aşan bir base image'ı kabaca 60–80MB'a indirebiliyor — bu, tipik bir Node.js Alpine image'ıyla karşılaştırılabilir, yine de Go'nun statik binary'lerinin üzerinde. Sınıf arşivinin build zamanında oluşturulup runtime'da yüklendiği Application Class Data Sharing ise yazarın rakamlarına göre başlatma süresini yüzde 30–40 azaltabiliyor. Başlatma süresi, Node ve Go'ya kıyasla Java'nın zayıf noktası olmaya devam ediyor; makaledeki karşılaştırma tablosu da JVM'in daha yavaş ısınmasını ve daha yüksek taban bellek kullanımını kabul ediyor.
Java 21 veya 25'ten geçiş neyi gerektiriyor
27 bir LTS olmadığı için, makalenin baskın üretim sürümü olarak nitelendirdiği Java 21'den geçmek isteğe bağlı. Yazı yine de sürümü takip etmek için nedenler veriyor: Daha önce --enable-preview flag'ları gerektiren preview özellikleri artık stabil, dolayısıyla bu flag'lar kaldırılabiliyor; büyük framework'ler genellikle bir sonraki LTS'den önce en yeni LTS olmayan sürüme uyumluluk güncellemeleri çıkarıyor; ve sürüm, Security Manager kalıntıları dahil olmak üzere Java 9'dan beri deprecated olan birkaç API'yi kaldırıyor.
Neden önemli
Java 27, tek bir özelliğinden çok onayladığı yönü açısından önemli: JVM, backend ekiplerini Node.js ve Go'ya iten kullanım kolaylığı avantajlarını istikrarlı biçimde içine çekiyor. Ardışık kod gibi okunan eşzamanlılık, bellek maliyeti olmadan istek başına thread ölçeklenmesi ve varsayılan olarak duraklamasız çöp toplama, Java'ya karşı cloud-native servislerdeki köklü itirazları aşındırıyor. Java 21 LTS üzerindeki ekiplerin geçme zorunluluğu yok, ama şu anda stabilize olan şey 2028'deki Java 29'u tanımlıyor — ve jlink ile AppCDS etrafındaki container araçları, JVM servislerini daha hafif runtime'ların yanında çalıştırmayı kolaylaştırıyor. Bu yıl stack'lerini tartan backend geliştiricileri için Java, birkaç yıl öncesine göre elemesi daha güç bir seçenek.
- #java
- #jvm
- #virtual-threads
- #backend
- #garbage-collection