{"id":34930,"date":"2025-11-23T19:41:22","date_gmt":"2025-11-23T16:41:22","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=34930"},"modified":"2025-11-23T19:41:22","modified_gmt":"2025-11-23T16:41:22","slug":"java-12-ozellikleri-kapsamli-bir-teknik-rehber","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/java-12-ozellikleri-kapsamli-bir-teknik-rehber\/","title":{"rendered":"Java 12 \u00d6zellikleri: Kapsaml\u0131 Bir Teknik Rehber"},"content":{"rendered":"<p><body><\/p>\n<h2>Java 12 \u00d6zellikleri: Kapsaml\u0131 Bir Teknik Rehber<\/h2>\n<p>Java 12, Oracle taraf\u0131ndan 19 Mart 2019&#8217;da yay\u0131mlanan, uzun vadeli destek (LTS) olmayan bir ara s\u00fcr\u00fcmd\u00fcr. Java&#8217;n\u0131n alt\u0131 ayl\u0131k s\u00fcr\u00fcm d\u00f6ng\u00fcs\u00fc kapsam\u0131nda \u00e7\u0131kan bu s\u00fcr\u00fcm, \u00f6zellikle G1 \u00c7\u00f6p Toplay\u0131c\u0131&#8217;daki (Garbage Collector) iyile\u015ftirmeler ve &#8220;Switch Expressions&#8221; gibi dil \u00f6zelliklerinin \u00f6nizlemesiyle dikkat \u00e7ekmektedir. Her ne kadar LTS olmasa da, Java platformunun geli\u015fiminde \u00f6nemli ad\u0131mlar atm\u0131\u015f ve sonraki s\u00fcr\u00fcmlere zemin haz\u0131rlam\u0131\u015ft\u0131r. Bu rehberde, Java 12&#8217;nin getirdi\u011fi ba\u015fl\u0131ca yenilikleri, kod \u00f6rnekleriyle ve pratik bilgilerle detayl\u0131 bir \u015fekilde inceleyece\u011fiz.<\/p>\n<h3>Yeni Dil \u00d6zellikleri: Switch Expressions (\u00d6nizleme)<\/h3>\n<p>Java 12&#8217;nin belki de en \u00e7ok konu\u015fulan \u00f6zelli\u011fi, JEP 325 ile tan\u0131t\u0131lan &#8220;Switch Expressions&#8221;\u0131n \u00f6nizleme s\u00fcr\u00fcm\u00fcd\u00fcr. Geleneksel <code>switch<\/code> ifadeleri, <code>break<\/code> unutuldu\u011funda olu\u015fabilen &#8220;fall-through&#8221; hatalar\u0131, kod tekrar\u0131 ve okunabilirlik sorunlar\u0131 gibi baz\u0131 dezavantajlara sahipti. Switch Expressions, bu sorunlar\u0131 gidermeyi ve <code>switch<\/code> yap\u0131s\u0131n\u0131 daha esnek ve g\u00fc\u00e7l\u00fc hale getirmeyi ama\u00e7lamaktad\u0131r.<\/p>\n<h4>Geleneksel Switch \u0130fadelerinin Sorunlar\u0131<\/h4>\n<p>A\u015fa\u011f\u0131daki geleneksel <code>switch<\/code> \u00f6rne\u011fini inceleyelim:<\/p>\n<pre><code class=\"language-java\">int day = 3;\nString dayType;\nswitch (day) {\n    case 1:\n    case 2:\n    case 3:\n    case 4:\n    case 5:\n        dayType = \"Hafta \u0130\u00e7i\";\n        break;\n    case 6:\n    case 7:\n        dayType = \"Hafta Sonu\";\n        break;\n    default:\n        dayType = \"Ge\u00e7ersiz G\u00fcn\";\n        break;\n}\nSystem.out.println(dayType); \/\/ Hafta \u0130\u00e7i<\/code><\/pre>\n<p>Bu \u00f6rnekte, <code>break<\/code> ifadelerinin her <code>case<\/code> blo\u011funun sonunda kullan\u0131lmas\u0131 gerekti\u011fi, aksi takdirde istenmeyen davran\u0131\u015flara yol a\u00e7abilece\u011fi g\u00f6r\u00fclmektedir. Ayr\u0131ca, bir de\u011fer atamak i\u00e7in <code>dayType<\/code> de\u011fi\u015fkeninin d\u0131\u015far\u0131da tan\u0131mlanmas\u0131 gerekmektedir.<\/p>\n<h4>Switch Expressions ile Yenilikler<\/h4>\n<p>Switch Expressions, <code>switch<\/code> yap\u0131s\u0131n\u0131n bir ifade (expression) olarak kullan\u0131lmas\u0131n\u0131 sa\u011flar, yani bir de\u011fer d\u00f6nd\u00fcrebilir. Yeni <code>-><\/code> (arrow) operat\u00f6r\u00fc ile <code>case<\/code> etiketleri daha k\u0131sa ve okunabilir hale gelir.<\/p>\n<pre><code class=\"language-java\">int day = 3;\nString dayType = switch (day) {\n    case 1, 2, 3, 4, 5 -> \"Hafta \u0130\u00e7i\";\n    case 6, 7 -> \"Hafta Sonu\";\n    default -> \"Ge\u00e7ersiz G\u00fcn\";\n};\nSystem.out.println(dayType); \/\/ Hafta \u0130\u00e7i<\/code><\/pre>\n<p>Bu \u00f6rnekte g\u00f6r\u00fcld\u00fc\u011f\u00fc gibi:<\/p>\n<ul>\n<li><code>case<\/code> etiketleri virg\u00fclle ayr\u0131larak birden fazla de\u011feri kapsayabilir.<\/li>\n<li><code>-><\/code> operat\u00f6r\u00fc, ilgili <code>case<\/code> i\u00e7in do\u011frudan d\u00f6nd\u00fcr\u00fclecek de\u011feri veya \u00e7al\u0131\u015ft\u0131r\u0131lacak tek bir ifadeyi belirtir.<\/li>\n<li><code>break<\/code> ifadelerine gerek kalmaz, bu da fall-through hatalar\u0131n\u0131 ortadan kald\u0131r\u0131r.<\/li>\n<li><code>switch<\/code> do\u011frudan bir de\u011fer d\u00f6nd\u00fcrd\u00fc\u011f\u00fc i\u00e7in, bir de\u011fi\u015fkene atama i\u015flemi \u00e7ok daha temiz ve tek sat\u0131rda yap\u0131labilir.<\/li>\n<\/ul>\n<p>E\u011fer bir <code>case<\/code> blo\u011fu birden fazla ifade i\u00e7erecekse, <code>yield<\/code> anahtar kelimesi ile bloktan de\u011fer d\u00f6nd\u00fcr\u00fclebilir. Ancak bu \u00f6zellik (yield), Java 12&#8217;de Switch Expressions&#8217;\u0131n ilk \u00f6nizleme s\u00fcr\u00fcm\u00fcnde tam olarak yer almam\u0131\u015f, Java 13&#8217;te daha belirgin hale gelmi\u015ftir. Java 12&#8217;de ana odak <code>-><\/code> operat\u00f6r\u00fc ve ifadenin bir de\u011fer d\u00f6nd\u00fcrmesi \u00fczerinedir.<\/p>\n<h4>Pratik Faydalar\u0131<\/h4>\n<p>Switch Expressions, kodun okunabilirli\u011fini art\u0131r\u0131r, hata yapma olas\u0131l\u0131\u011f\u0131n\u0131 azalt\u0131r ve daha \u00f6zl\u00fc bir kod yaz\u0131m\u0131na olanak tan\u0131r. \u00d6zellikle enum&#8217;lar veya sabit de\u011ferlerle \u00e7al\u0131\u015f\u0131rken \u00e7ok kullan\u0131\u015fl\u0131d\u0131r. Bu \u00f6zellik, Java 14 ile standart hale gelmi\u015ftir.<\/p>\n<h3>G1 \u00c7\u00f6p Toplay\u0131c\u0131 \u0130yile\u015ftirmeleri<\/h3>\n<p>Java 12, G1 (Garbage-First) \u00e7\u00f6p toplay\u0131c\u0131s\u0131n\u0131n performans\u0131n\u0131 ve davran\u0131\u015f\u0131n\u0131 iyile\u015ftirmeye y\u00f6nelik birka\u00e7 \u00f6nemli JEP i\u00e7erir. G1, Java 9&#8217;dan bu yana varsay\u0131lan \u00e7\u00f6p toplay\u0131c\u0131d\u0131r ve \u00f6zellikle b\u00fcy\u00fck y\u0131\u011f\u0131n belleklerinde (heap) d\u00fc\u015f\u00fck duraklama s\u00fcreleri (pause times) sa\u011flamay\u0131 hedefler.<\/p>\n<h4>JEP 344: G1 Abortable Mixed Collections (G1 \u0130ptal Edilebilir Kar\u0131\u015f\u0131k Koleksiyonlar)<\/h4>\n<p>G1, y\u0131\u011f\u0131n belle\u011fini (heap) b\u00f6lgelere (regions) ay\u0131r\u0131r ve hem gen\u00e7 (young) hem de eski (old) nesilleri toplayan &#8220;kar\u0131\u015f\u0131k koleksiyonlar&#8221; (mixed collections) yapar. Bu koleksiyonlar bazen hedef duraklama s\u00fcresini a\u015fabilir. JEP 344, G1&#8217;in kar\u0131\u015f\u0131k koleksiyonlar\u0131n\u0131 daha &#8220;iptal edilebilir&#8221; hale getirerek, bir koleksiyon d\u00f6ng\u00fcs\u00fcn\u00fcn duraklama s\u00fcresi hedefine ula\u015fmadan \u00f6nce durdurulmas\u0131na olanak tan\u0131r. Bu sayede, G1&#8217;in belirlenen duraklama s\u00fcresi hedeflerine daha iyi uymas\u0131 sa\u011flan\u0131r ve uygulaman\u0131n performans\u0131 daha \u00f6ng\u00f6r\u00fclebilir hale gelir.<\/p>\n<h4>JEP 346: Promptly Return Unused Committed Memory from G1 (G1&#8217;den Kullan\u0131lmayan Tahsis Edilmi\u015f Belle\u011fi H\u0131zla \u0130ade Et)<\/h4>\n<p>\u00d6zellikle konteynerize edilmi\u015f ortamlarda (Docker, Kubernetes vb.) \u00e7al\u0131\u015fan uygulamalar i\u00e7in bellek kullan\u0131m\u0131 kritik \u00f6neme sahiptir. G1 \u00e7\u00f6p toplay\u0131c\u0131, ge\u00e7mi\u015fte kullan\u0131lmayan heap belle\u011fini i\u015fletim sistemine (OS) geri verme konusunda biraz yava\u015f davranabilirdi. JEP 346 ile G1, kullan\u0131lmayan ve taahh\u00fct edilmi\u015f (committed) heap belle\u011fini i\u015fletim sistemine daha h\u0131zl\u0131 bir \u015fekilde iade edebilir. Bu, \u00f6zellikle burst y\u00fcklerle \u00e7al\u0131\u015fan ve daha sonra bellek ihtiyac\u0131 azalan uygulamalar\u0131n, sistem kaynaklar\u0131n\u0131 daha verimli kullanmas\u0131na olanak tan\u0131r. Bu iyile\u015ftirme, konteyner ortamlar\u0131nda \u00e7al\u0131\u015fan Java uygulamalar\u0131n\u0131n genel ayak izini (footprint) ve maliyetini d\u00fc\u015f\u00fcrmeye yard\u0131mc\u0131 olur.<\/p>\n<h3>Deneysel \u00c7\u00f6p Toplay\u0131c\u0131: Shenandoah (JEP 189)<\/h3>\n<p>Java 12 ile birlikte, JEP 189 kapsam\u0131nda &#8220;Shenandoah&#8221; ad\u0131nda deneysel bir \u00e7\u00f6p toplay\u0131c\u0131 tan\u0131t\u0131ld\u0131. Shenandoah, \u00f6zellikle \u00e7ok d\u00fc\u015f\u00fck duraklama s\u00fcreleri (ultra-low pause times) sunmay\u0131 hedefleyen bir \u00e7\u00f6p toplay\u0131c\u0131d\u0131r. G1&#8217;in aksine, Shenandoah&#8217;\u0131n \u00e7o\u011fu \u00e7\u00f6p toplama i\u015fini e\u015f zamanl\u0131 (concurrently) olarak, yani uygulama i\u015f par\u00e7ac\u0131klar\u0131 \u00e7al\u0131\u015f\u0131rken yapmas\u0131yla \u00f6ne \u00e7\u0131kar.<\/p>\n<h4>Shenandoah&#8217;\u0131n Temel \u00d6zellikleri<\/h4>\n<ul>\n<li>\n        <strong>Ultra D\u00fc\u015f\u00fck Duraklama S\u00fcreleri:<\/strong> Shenandoah&#8217;\u0131n en b\u00fcy\u00fck vaadi, y\u0131\u011f\u0131n boyutu ne olursa olsun (birka\u00e7 y\u00fcz MB&#8217;den birka\u00e7 TB&#8217;ye kadar) duraklama s\u00fcrelerinin milisaniyeler seviyesinde kalmas\u0131d\u0131r. Bu, \u00f6zellikle interaktif uygulamalar, finansal ticaret sistemleri veya ger\u00e7ek zamanl\u0131 veri i\u015fleme gibi d\u00fc\u015f\u00fck gecikme s\u00fcresi gerektiren uygulamalar i\u00e7in kritik bir avantajd\u0131r.\n    <\/li>\n<li>\n        <strong>E\u015f Zamanl\u0131 \u0130\u015flem:<\/strong> \u00c7o\u011fu \u00e7\u00f6p toplama a\u015famas\u0131n\u0131 uygulama i\u015f par\u00e7ac\u0131klar\u0131yla e\u015f zamanl\u0131 olarak y\u00fcr\u00fct\u00fcr. Bu, uygulaman\u0131n \u00e7al\u0131\u015fmaya devam etmesini ve &#8220;donma&#8221; s\u00fcrelerinin minimumda tutulmas\u0131n\u0131 sa\u011flar.\n    <\/li>\n<\/ul>\n<h4>Nas\u0131l Etkinle\u015ftirilir?<\/h4>\n<p>Shenandoah deneysel oldu\u011fu i\u00e7in JVM&#8217;de a\u00e7\u0131k\u00e7a etkinle\u015ftirilmesi gerekir:<\/p>\n<pre><code class=\"language-bash\">java -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC MyApp.java<\/code><\/pre>\n<h4>Pratik Bilgiler ve Uyar\u0131lar<\/h4>\n<p>Shenandoah, Java 12&#8217;de deneysel bir \u00f6zellik olarak sunuldu. \u00dcretim ortamlar\u0131nda kullanmadan \u00f6nce kapsaml\u0131 testler yap\u0131lmas\u0131 \u015fiddetle tavsiye edilir. D\u00fc\u015f\u00fck duraklama s\u00fcreleri sunsa da, e\u015f zamanl\u0131 \u00e7al\u0131\u015fmas\u0131 nedeniyle genel i\u015f hacminde (throughput) hafif bir d\u00fc\u015f\u00fc\u015fe neden olabilir. Do\u011fru kullan\u0131m senaryosunda, Shenandoah oyun de\u011fi\u015ftirici bir \u00f6zellik olabilir. Daha sonraki Java s\u00fcr\u00fcmlerinde (Java 15 itibar\u0131yla) Shenandoah standart bir \u00f6zellik haline gelmi\u015ftir.<\/p>\n<h3>Di\u011fer \u00d6nemli Geli\u015ftirmeler<\/h3>\n<p>Java 12, yukar\u0131da bahsedilenlerin d\u0131\u015f\u0131nda, platformun temelini g\u00fc\u00e7lendiren ve gelecekteki geli\u015ftirmelere zemin haz\u0131rlayan ba\u015fka JEP&#8217;ler de i\u00e7erir.<\/p>\n<h4>JEP 340: One AArch64 Port (Tek Bir AArch64 Portu)<\/h4>\n<p>Bu JEP, mevcut <code>arm64<\/code> portunu kald\u0131rarak, yaln\u0131zca <code>aarch64<\/code> portunun korunmas\u0131n\u0131 sa\u011flam\u0131\u015ft\u0131r. Bu, ARM 64-bit mimarisi i\u00e7in tek ve daha s\u00fcrd\u00fcr\u00fclebilir bir kaynak a\u011fac\u0131 olu\u015fturarak geli\u015ftirme ve bak\u0131m s\u00fcre\u00e7lerini basitle\u015ftirir.<\/p>\n<h4>JEP 341: Default CDS Archives (Varsay\u0131lan CDS Ar\u015fivleri)<\/h4>\n<p>S\u0131n\u0131f Veri Payla\u015f\u0131m\u0131 (Class Data Sharing &#8211; CDS), Java uygulamalar\u0131n\u0131n ba\u015flang\u0131\u00e7 s\u00fcrelerini h\u0131zland\u0131rmak ve bellek ayak izini azaltmak i\u00e7in kullan\u0131lan bir teknolojidir. JEP 341 ile birlikte, varsay\u0131lan CDS ar\u015fivleri, JVM taraf\u0131ndan otomatik olarak olu\u015fturulur ve kullan\u0131l\u0131r. Bu, kullan\u0131c\u0131lar\u0131n CDS&#8217;yi manuel olarak yap\u0131land\u0131rmas\u0131na gerek kalmadan, bu performans iyile\u015ftirmelerinden faydalanmas\u0131n\u0131 sa\u011flar. \u00d6zellikle k\u00fc\u00e7\u00fck uygulamalar veya konteynerize edilmi\u015f ortamlarda ba\u015flatma s\u00fcrelerini \u00f6nemli \u00f6l\u00e7\u00fcde k\u0131saltabilir.<\/p>\n<h4>JEP 334: JVM Constants API (\u00d6nizleme)<\/h4>\n<p>Bu JEP, anahtar s\u0131n\u0131f dosyas\u0131 ve \u00e7al\u0131\u015fma zaman\u0131 yap\u0131tlar\u0131na programatik eri\u015fim sa\u011flayan bir API&#8217;nin \u00f6nizlemesini sunar. Daha \u00e7ok d\u00fc\u015f\u00fck seviyeli ara\u00e7lar, k\u00fct\u00fcphane geli\u015ftiricileri ve JVM d\u00fczeyinde \u00e7al\u0131\u015fanlar i\u00e7in faydal\u0131d\u0131r. Bu API, <code>ConstantPool<\/code> gibi JVM&#8217;nin dahili yap\u0131lar\u0131na eri\u015fimi standartla\u015ft\u0131rarak, Java&#8217;n\u0131n meta programlama yeteneklerini geli\u015ftirir.<\/p>\n<h3>Pratik Uygulamalar ve Genel Faydalar<\/h3>\n<p>Java 12, \u00f6zellikle a\u015fa\u011f\u0131daki alanlarda pratik faydalar sunar:<\/p>\n<ul>\n<li>\n        <strong>Geli\u015ftirici Verimlili\u011fi:<\/strong> Switch Expressions, daha okunabilir, g\u00fcvenli ve \u00f6zl\u00fc kod yazarak geli\u015ftiricilerin verimlili\u011fini art\u0131r\u0131r. Fall-through hatalar\u0131n\u0131n ortadan kalkmas\u0131, hata ay\u0131klama s\u00fcresini azalt\u0131r.\n    <\/li>\n<li>\n        <strong>Performans \u0130yile\u015ftirmeleri:<\/strong> G1 \u00e7\u00f6p toplay\u0131c\u0131s\u0131ndaki iyile\u015ftirmeler (iptal edilebilir kar\u0131\u015f\u0131k koleksiyonlar ve bellek iadesi), uygulamalar\u0131n daha \u00f6ng\u00f6r\u00fclebilir performans g\u00f6stermesini ve sistem kaynaklar\u0131n\u0131 daha verimli kullanmas\u0131n\u0131 sa\u011flar. \u00d6zellikle konteynerize ortamlarda \u00e7al\u0131\u015fan uygulamalar i\u00e7in bu, maliyet ve kaynak optimizasyonu a\u00e7\u0131s\u0131ndan \u00f6nemlidir.\n    <\/li>\n<li>\n        <strong>D\u00fc\u015f\u00fck Gecikme S\u00fcresi Gerektiren Uygulamalar:<\/strong> Deneysel Shenandoah \u00e7\u00f6p toplay\u0131c\u0131, kritik d\u00fc\u015f\u00fck gecikme s\u00fcresi gerektiren uygulamalar i\u00e7in yeni bir \u00e7\u00f6z\u00fcm sunar. Bu t\u00fcr uygulamalar i\u00e7in milisaniyelerin bile \u00f6nemli oldu\u011fu durumlarda Shenandoah b\u00fcy\u00fck bir fark yaratabilir.\n    <\/li>\n<li>\n        <strong>Platform Geni\u015fletilebilirli\u011fi:<\/strong> JVM Constants API gibi \u00f6zellikler, Java platformunun gelecekteki geli\u015ftirmelere ve ara\u00e7lara daha a\u00e7\u0131k olmas\u0131n\u0131 sa\u011flar.\n    <\/li>\n<\/ul>\n<p>Java 12 bir LTS s\u00fcr\u00fcm\u00fc olmasa da, getirdi\u011fi yenilikler Java ekosisteminin s\u00fcrekli geli\u015fimini ve modern uygulama ihtiya\u00e7lar\u0131na adaptasyonunu g\u00f6zler \u00f6n\u00fcne sermektedir. \u00d6zellikle Switch Expressions gibi dil \u00f6zellikleri ve GC iyile\u015ftirmeleri, sonraki LTS s\u00fcr\u00fcmlerinin temelini olu\u015fturmu\u015ftur.<\/p>\n<h3>Sonu\u00e7 ve S\u0131k\u00e7a Sorulan Sorular<\/h3>\n<p>Java 12, her ne kadar k\u0131sa \u00f6m\u00fcrl\u00fc bir s\u00fcr\u00fcm olsa da, Java geli\u015ftirme d\u00fcnyas\u0131na \u00f6nemli yenilikler getirmi\u015ftir. Switch Expressions gibi dil \u00f6zelliklerinin \u00f6nizlemesi, G1 \u00e7\u00f6p toplay\u0131c\u0131s\u0131ndaki kritik iyile\u015ftirmeler ve deneysel Shenandoah GC&#8217;nin tan\u0131t\u0131lmas\u0131, Java&#8217;n\u0131n performans, okunabilirlik ve modern uygulama gereksinimlerine adaptasyon konusundaki kararl\u0131l\u0131\u011f\u0131n\u0131 g\u00f6stermektedir. Bu yenilikler, daha sonraki s\u00fcr\u00fcmlerde olgunla\u015farak standart hale gelmi\u015f ve geli\u015ftiricilerin g\u00fcnl\u00fck i\u015f ak\u0131\u015flar\u0131n\u0131 kolayla\u015ft\u0131rm\u0131\u015ft\u0131r.<\/p>\n<h4>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h4>\n<h3 id=\"sss-1\">Java 12 bir LTS (Uzun Vadeli Destek) s\u00fcr\u00fcm\u00fc m\u00fcd\u00fcr?<\/h3>\n<p>Hay\u0131r, Java 12 bir LTS s\u00fcr\u00fcm\u00fc de\u011fildir. Java&#8217;n\u0131n alt\u0131 ayl\u0131k s\u00fcr\u00fcm d\u00f6ng\u00fcs\u00fc kapsam\u0131nda \u00e7\u0131kan, k\u0131sa \u00f6m\u00fcrl\u00fc bir ara s\u00fcr\u00fcmd\u00fcr. LTS s\u00fcr\u00fcmleri her iki y\u0131lda bir yay\u0131mlan\u0131r (\u00f6rne\u011fin Java 11, Java 17).<\/p>\n<h3 id=\"sss-2\">Java 12&#8217;deki en \u00f6nemli yenilik nedir?<\/h3>\n<p>Java 12&#8217;deki en dikkat \u00e7ekici ve geli\u015ftiriciler i\u00e7in en pratik yenilik, &#8220;Switch Expressions&#8221;\u0131n \u00f6nizleme s\u00fcr\u00fcm\u00fcd\u00fcr. Bu \u00f6zellik, <code>switch<\/code> ifadelerinin daha okunabilir, g\u00fcvenli ve bir de\u011fer d\u00f6nd\u00fcrebilen bir yap\u0131ya d\u00f6n\u00fc\u015fmesini sa\u011flam\u0131\u015ft\u0131r.<\/p>\n<h3 id=\"sss-3\">Shenandoah GC&#8217;yi \u00fcretim ortamlar\u0131nda kullanmal\u0131 m\u0131y\u0131m?<\/h3>\n<p>Java 12&#8217;de Shenandoah GC deneysel bir \u00f6zellik olarak sunulmu\u015ftur. \u00dcretim ortamlar\u0131nda kullanmadan \u00f6nce uygulaman\u0131zla kapsaml\u0131 testler yapman\u0131z ve performans profilini dikkatlice de\u011ferlendirmeniz \u00f6nerilir. Daha sonraki s\u00fcr\u00fcmlerde (Java 15&#8217;ten itibaren) Shenandoah standart bir \u00f6zellik haline gelmi\u015ftir.<\/p>\n<h3 id=\"sss-4\">Neden Java 12&#8217;ye ge\u00e7meliyim (LTS olmamas\u0131na ra\u011fmen)?<\/h3>\n<p>E\u011fer en son dil \u00f6zelliklerini ve performans iyile\u015ftirmelerini denemek istiyorsan\u0131z veya belirli bir JEP&#8217;in (\u00f6rne\u011fin G1 iyile\u015ftirmeleri) uygulaman\u0131z i\u00e7in kritik faydalar sa\u011flayaca\u011f\u0131n\u0131 d\u00fc\u015f\u00fcn\u00fcyorsan\u0131z Java 12&#8217;yi de\u011ferlendirebilirsiniz. Ancak genel olarak, \u00fcretim ortamlar\u0131 i\u00e7in LTS s\u00fcr\u00fcmleri (Java 11, Java 17 gibi) tercih edilir. Java 12&#8217;deki \u00e7o\u011fu \u00f6zellik sonraki LTS s\u00fcr\u00fcmlerine dahil edilmi\u015ftir.<\/p>\n<h3 id=\"sss-5\">Switch Expressions ne zaman standart bir \u00f6zellik oldu?<\/h3>\n<p>Switch Expressions, Java 12 ve Java 13&#8217;te \u00f6nizleme \u00f6zelli\u011fi olarak kald\u0131ktan sonra, Java 14 ile standart bir dil \u00f6zelli\u011fi haline gelmi\u015ftir.<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Java 12 \u00d6zellikleri: Kapsaml\u0131 Bir Teknik Rehber\nJava 12, Oracle taraf\u0131ndan 19 Mart 2019&#8217;da yay\u0131mlanan, uzun vadeli destek (LTS) olmayan bir ara","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1408],"tags":[],"class_list":{"0":"post-34930","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-java","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Java 12 \u00d6zellikleri: Kapsaml\u0131 Bir Teknik Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/java-12-ozellikleri-kapsamli-bir-teknik-rehber\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Java 12 \u00d6zellikleri: Kapsaml\u0131 Bir Teknik Rehber\" \/>\n<meta property=\"og:description\" content=\"Java 12 \u00d6zellikleri: Kapsaml\u0131 Bir Teknik Rehber Java 12, Oracle taraf\u0131ndan 19 Mart 2019&#039;da yay\u0131mlanan, uzun vadeli destek (LTS) olmayan bir ara\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/java-12-ozellikleri-kapsamli-bir-teknik-rehber\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-23T16:41:22+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/java-12-ozellikleri-kapsamli-bir-teknik-rehber\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/java-12-ozellikleri-kapsamli-bir-teknik-rehber\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Java 12 \u00d6zellikleri: Kapsaml\u0131 Bir Teknik Rehber\",\"datePublished\":\"2025-11-23T16:41:22+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/java-12-ozellikleri-kapsamli-bir-teknik-rehber\/\"},\"wordCount\":1864,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Java\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/java-12-ozellikleri-kapsamli-bir-teknik-rehber\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/java-12-ozellikleri-kapsamli-bir-teknik-rehber\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/java-12-ozellikleri-kapsamli-bir-teknik-rehber\/\",\"name\":\"Java 12 \u00d6zellikleri: Kapsaml\u0131 Bir Teknik Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-23T16:41:22+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/java-12-ozellikleri-kapsamli-bir-teknik-rehber\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/java-12-ozellikleri-kapsamli-bir-teknik-rehber\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/java-12-ozellikleri-kapsamli-bir-teknik-rehber\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java 12 \u00d6zellikleri: Kapsaml\u0131 Bir Teknik Rehber\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Java 12 \u00d6zellikleri: Kapsaml\u0131 Bir Teknik Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/java-12-ozellikleri-kapsamli-bir-teknik-rehber\/","og_locale":"tr_TR","og_type":"article","og_title":"Java 12 \u00d6zellikleri: Kapsaml\u0131 Bir Teknik Rehber","og_description":"Java 12 \u00d6zellikleri: Kapsaml\u0131 Bir Teknik Rehber Java 12, Oracle taraf\u0131ndan 19 Mart 2019'da yay\u0131mlanan, uzun vadeli destek (LTS) olmayan bir ara","og_url":"https:\/\/fatihsoysal.com\/blog\/java-12-ozellikleri-kapsamli-bir-teknik-rehber\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-23T16:41:22+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"10 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/java-12-ozellikleri-kapsamli-bir-teknik-rehber\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/java-12-ozellikleri-kapsamli-bir-teknik-rehber\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Java 12 \u00d6zellikleri: Kapsaml\u0131 Bir Teknik Rehber","datePublished":"2025-11-23T16:41:22+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/java-12-ozellikleri-kapsamli-bir-teknik-rehber\/"},"wordCount":1864,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Java"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/java-12-ozellikleri-kapsamli-bir-teknik-rehber\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/java-12-ozellikleri-kapsamli-bir-teknik-rehber\/","url":"https:\/\/fatihsoysal.com\/blog\/java-12-ozellikleri-kapsamli-bir-teknik-rehber\/","name":"Java 12 \u00d6zellikleri: Kapsaml\u0131 Bir Teknik Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-23T16:41:22+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/java-12-ozellikleri-kapsamli-bir-teknik-rehber\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/java-12-ozellikleri-kapsamli-bir-teknik-rehber\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/java-12-ozellikleri-kapsamli-bir-teknik-rehber\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Java 12 \u00d6zellikleri: Kapsaml\u0131 Bir Teknik Rehber"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/34930","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=34930"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/34930\/revisions"}],"predecessor-version":[{"id":34931,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/34930\/revisions\/34931"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=34930"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=34930"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=34930"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}