Masalah donya iku masalah donya, lan Jawa anyar ing jadwal. Yaiku persis saben nem sasi sepisan. Versi rilis Java 14 dirilis tanggal 17 Maret, lan ngenalake sawetara inovasi sing menarik kanggo basa sing dituju kanggo pangembang. Ing antarane yaiku dhukungan eksperimen kanggo tembung kunci rekaman , dhukungan kanggo pencocokan pola ing operator " instanceof ", NullPointerExceptions sing luwih ramah pangguna , "pratinjau" blok teks sing ditambahi , switch standar sing dianyari, lan liya-liyane. Ayo kita ngelingake yen kabeh inovasi ing Jawa diwiwiti kanthi proposal ekstensi ( JEP, Java Enhancement Proposals ). Pangembang ngusulake owah-owahan, dideleng dening wong tuwa Jawa "resmi", banjur sawetara owah-owahan kasebut ditampa, lan banjur dadi bagian saka JDK. Lan saiki - bab kabeh supaya.
JEP 359: Cathetan
Rekaman, uga dikenal minangka Rekaman, kasedhiya kanggo JDK 14 ing mode pratinjau, lan iki pancen anyar kanggo Jawa. Nyatane, sadurunge kita duwe jinis anyar sing dikembangake sajrone proyek Valhalla . Cathetan padha karo enumerasi lan ngidini sampeyan nyederhanakake kode sampeyan. Ateges, dheweke ngganti kelas sing duwe negara nanging ora ana prilaku. Cukup, ana lapangan, ora ana metode. Ing kasus kelas, kita kadhangkala kudu nulis akeh kode bola-bali sing ora tansah perlu: konstruktor, aksesoris, padha (), hashCode (), toString (), etc. Kanggo ngindhari kode bola-bali iki, Java plans kanggo nggunakake rekaman. Punika versi klasik:final class Triangle {
public final int x;
public final int y;
public final int z;
public Triangle(int x, int y, int z) {
this.x = x;
this.y = y;
this.z = z;
}
// equals, hashCode, toString
Ayo pindhah menyang Java 14 lan gunakake rekaman:
public record Triangle(int x, int y, int z){}
Mekaten. Wigati dimangerteni manawa rekaman saiki ana ing wangun pratinjau, dadi kanggo nyoba ing praktik sampeyan kudu ndownload jdk14 lan ketik printah:
javac —enable-preview —release 14 Triangle.java
Cathetan minangka kelas, sanajan ana watesan. Dheweke ora bisa ngluwihi kelas liyane utawa ngumumake lapangan (kajaba final pribadi sing cocog karo komponen deklarasi negara). Rekaman implisit final lan ora bisa abstrak. Cathetan beda karo kelas biasa amarga ora bisa misahake API saka perwakilan. Nanging mundhut kamardikan diimbangi kanthi akurasi tambah. Komponen rekaman uga implisit final.
JEP 305: Pencocokan Pola kanggo instanceof (Preview)
Fitur Pattern Matching , dikenalaké ing Jawa 14 ing pratinjau, dirancang kanggo gabungke mriksa jinis obyek lan konversi ing instanceof operator. Ing tembung liya, sadurunge Java 14 mesthi ana, contone, kode ing ngisor iki:Object object = Violin;
if (object instanceof Instrument) {
Instrument instrument = (Instrument) object;
System.out.println(instrument.getMaster());
}
Nalika sampeyan bisa ndeleng, kita kudu matak obyek kanggo kelas kang cara kita arep kanggo nggunakake. Saiki Java 14 lan fitur Pattern Matching sing disambungake ngidini sampeyan nyuda kode ing ngisor iki:
Object object = Violin;
if (object instanceof Instrument instrument){
System.out.println(instrument.getMaster());
}
JEP 343: Packaging Tool (Incubator)
JDK 8 duwe alat javapackager sing dirancang kanggo JavaFX. Nanging, sawise pemisahan JavaFX saka Jawa kanthi rilis JDK 11, javapackager sing populer ora kasedhiya maneh. Javapackager minangka alat kemasan. Iki ngidini aplikasi Java dikemas kanthi cara sing bisa diinstal kaya kabeh program "normal" liyane. Contone, gawe file exe kanggo pangguna Windows lan bukak aplikasi Java kaya manungsa - kanthi klik kaping pindho. Mesthine, alat kasebut kurang banget, mula JEP 343 ngenalake alat anyar, jpackage , sing ngemas aplikasi Java menyang paket khusus platform sing ngemot kabeh dependensi sing dibutuhake. Format paket sing didhukung kanggo platform tartamtu:- Linux: deb lan rpm
- macOS: pkg lan dmg
- Windows: MSI lan EXE
Pengin ngerti luwih lengkap babagan cara Jawa berkembang? Waca artikel babagan versi sadurunge! Java 13: Fitur Anyar Java 12 is Here: Apa sing Anyar? Java 11 wis dirilis: fitur lan kapabilitas anyar Saka 8 nganti 13: ringkesan lengkap babagan versi Java. Part 1 Saka 8 nganti 13: ringkesan lengkap babagan versi Jawa. Bagean 2 |
JEP 345: Alokasi Memori NUMA-Aware kanggo G1
JEP 345 serves mung kanggo ngleksanakake NUMA (Akses memori non-seragam) support. Iki arsitektur akses memori heterogen, cara nyetel kluster mikroprosesor menyang sistem multiprocessor kang memori bisa disebarake sacara lokal: saben inti prosesor entuk jumlah cilik saka memori lokal, nalika intine liyane duwe akses menyang. JEP 345 rencana kanggo nglengkapi kolektor sampah G1 kanthi kemampuan kanggo nggunakake arsitektur kasebut. Antarane liyane, pendekatan iki mbantu ningkatake kinerja mesin sing kuat banget.JEP 349: JFR Acara Streaming
Java Flight Recorder (JFR) saiki dadi bagian saka OpenJDK lan mulane kasedhiya kanthi gratis. JDK 14 nambah API kanggo on-the-fly nelusuri acara JFR (JDK Flight Recorder), utamané kanggo ngatur terus ngawasi aplikasi aktif lan ora aktif. Acara sing padha direkam kanggo opsi non-streaming, kanthi overhead kurang saka 1%. Kanthi cara iki acara bakal dialirake bebarengan karo opsi non-streaming. Nanging, JEP 349 kudu ora ngidini callback sinkron kanggo konsumen sing cocog. Malah data saka cathetan sing disimpen ing memori penengah ora bisa diakses. Secara teknis, paket jdk.jfr.consumer ing modul jdk.jfr bakal ditambah karo fungsi kanggo akses bedo kanggo acara.JEP 352: Non-Volatile Mapped Byte Buffers
Kaya sing sampeyan ngerteni, API File Java NIO (New IO) wis ana wiwit JDK 1.4, lan banjur ditambahake anyar sing diarani Path. Path minangka antarmuka sing ngganti kelas java.io.File minangka perwakilan saka file utawa direktori nalika kita nggarap Java NIO. JEP 352 ngluwihi MappedByteBuffer kanggo mbukak bagean data file menyang memori non-molah malih (NVM). Memori komputer iki, sing data ora bakal ilang sanajan daya dipateni (asring disebut memori mung maca), digunakake kanggo nyimpen data kanthi permanen. proposal penambahan Jawa iki menehi modul anyar lan kelas kanggo API JDK: modul jdk.nio.mapmode, kang nawakake mode anyar (READ_ONLY_SYNC, WRITE_ONLY_SYNC) kanggo nggawe peta buffer bait (MappedByteBuffer) referensi NVM.JEP 358: NullPointerExceptions sing migunani
NullPointerExceptions saiki bakal luwih ramah programmer. Ing pangertèn sing gambaran saka istiméwa bakal luwih informatif saka sadurunge. Iki amarga JVM wis diwulang luwih akurat njelasno instruksi bytecode program, lan bisa nunjukaké kang variabel ndadékaké menyang Nilai nul. Ayo kita duwe kode:a.getMessage().getUserInfo().getName()
Ing salah sawijining Jawa paling anyar, kita bakal entuk log kesalahan biasa, sing ora mangsuli pitakon sapa sing bener:
Exception in thread "main" java.lang.NullPointerException
at Main.main(Main.java:12)
Lan iki apa sing bakal diwenehake Java 14 yen sampeyan arep nyoba fitur pratinjau iki:
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "UserInfo().getName()" because the return value of "Message().getUserInfo()" is null
at Main.main(Main.java:12)
Rantai iki luwih bisa dingerteni lan ngidini sampeyan ngatasi kesalahan kanthi luwih cepet.
JEP 361: Ngalih Ekspresi (Standar)
Operator Switch sing dianyari kasedhiya ing Jawa 12 lan 13 sadurunge, nanging mung minangka fitur pratinjau, yaiku, ora diaktifake kanthi standar. Saiki ing JDK 14 kabeh bisa metu saka kothak. Java 14 ngenalake wangun anyar sing disederhanakake saka blok switch kanthi label L -> .... Bentuk anyar nyederhanakake kode ing sawetara kasus. Kene sawetara conto. Ayo kita duwe enum sing nggambarake dina ing minggu. Kita bisa nulis kode klasik (pra-Jawa 14):switch (day) {
case MONDAY:
case FRIDAY:
case SUNDAY:
System.out.println(6);
break;
case TUESDAY:
System.out.println(7);
break;
case THURSDAY:
case SATURDAY:
System.out.println(8);
break;
case WEDNESDAY:
System.out.println(9);
break;
}
Lan iki pilihan nggunakake Java 14:
switch (day) {
case MONDAY, FRIDAY, SUNDAY -> System.out.println(6);
case TUESDAY -> System.out.println(7);
case THURSDAY, SATURDAY -> System.out.println(8);
case WEDNESDAY -> System.out.println(9);
}
Sampeyan uga bisa nulis blok multi-baris lan ngasilake nilai kanthi tembung kunci asil anyar:
int result = switch (s) {
case "Working from Home" -> 1;
case "Working from Office" -> 2;
default -> {
System.out.println("Neither Home nor Office… Cafe? Car? Park?...");
yield 0;
}
};
Ana sawetara bab sing luwih penting kanggo mbudidaya nalika nggunakake ngalih anyar s . Utamane, sampeyan kudu ngelingi yen pilihan kudu lengkap. Yaiku, kanggo kabeh nilai sing bisa ditindakake kudu ana label switch sing cocog. Wiwit ngasilake saiki dadi tembung kunci, kelas sing diarani ngasilake bisa uga ana ing Jawa 14. Umume, yen sampeyan pengin sinau babagan nggunakake switch sing dianyari, bukak JEP 361 lan sinau. Ana akeh informasi menarik ing kana.
JEP 362: Deprecate Port Solaris lan SPARC
Ora mungkin akeh sing maca ngelingi babagan sistem operasi Solaris . Sistem operasi basis UNIX iki, digawe dening tuwane Jawa, Sun Microsystems, digunakake utamané kanggo server ing arsitektur SPARC ... Kakehan tembung ora pati ngerti saben centimeter kothak? Ora ana masalah gedhe: JEP 362 mungkasi dhukungan kanggo platform Solaris/SPARC, Solaris/x64, lan Linux/SPARC. Tegese, porte saiki wis Dibuwang, lan ing mangsa ngarep bakal dicopot saka OpenJDK. Nanging, versi Jawa lawas (sadurunge JDK 14) babagan port Solaris/SPARC, Solaris/x64 lan Linux/SPARC kudu bisa digunakake tanpa modifikasi. Yen sampeyan penggemar sejarah lan kasengsem ing teknologi jaman biyen, bukak Wikipedia lan maca babagan arsitektur SPARС .JEP 363: Copot Pengumpul Sampah Concurrent Mark Sweep (CMS).
Pengumpul sampah CMS (Concurrent Mark Sweep) ditargetake dicopot amarga rong taun kepungkur ditandhani minangka lungse lan ora dijaga. Nanging, pangguna saka versi lawas saka Jawa nggunakake CMS GC bisa exhale - tujuan JEP iki ora kanggo mbusak builder saka rilis JDK sadurungé. Kajaba iku, kombinasi algoritma pengumpulan sampah ParallelScavenge lan SerialOld (mlaku kanthi opsi "-XX: + UseParallelGC -XX: -UseParallelOldGC") wis ora digunakake.JEP 364: ZGC ing macOS lan JEP 365: ZGC ing Windows
Ana tukang sampah sing menarik sing diarani Z Garbage Collector (ZGC) . Kerjane ing mode pasif, lan nyoba kanggo nyilikake wektu tundha amarga koleksi uwuh: wektu mandeg nalika nggunakake ZGC ora ngluwihi 10 ms. Bisa digunakake karo tumpukan cilik lan raksasa (sing njupuk akeh terabyte). JEP 364 lan JEP 365 praktis kembar. JEP 364 nggawa Z Garbage Collector menyang MacOS. Bagéyan saka JEP uga njlèntrèhaké fungsi kolektor kanggo mbebasake memori piranti sing ora digunakake, kaya sing ditemtokake ing JEP 351 , iki wis kedadeyan wiwit Jawa 13. Implementasi ZGC ing macOS duwe rong bagéan:- Dhukungan memori multi-pemetaan ing macOS
- Dhukungan ZGC kanggo leladen memori terus-terusan
- Dhukungan memori multi-pemetaan
- Dhukungan kanggo pemetaan memori adhedhasar file kaca menyang papan alamat sing dilindhungi
- Dhukungan kanggo pemetaan lan unmapping bagean sewenang-wenang saka tumpukan
- Dhukungan kanggo nindakake lan ora nindakake bagean sewenang-wenang saka tumpukan
JEP 366: Ngilangi Kombinasi ParallelScavenge + SerialOld GC
JEP iki nolak kombinasi algoritma pengumpulan sampah Parallel Scavenge lan Serial Old. Kombinasi iki kudu diaktifake kanthi manual nggunakake paramèter baris printah -XX: + UseParallelGC -XX: -UseParallelOldGC. Penulis percaya yen kombinasi kasebut spesifik banget, nanging uga mbutuhake gaweyan pangopènan sing signifikan. Dadi saiki opsi -XX: UseParallelOldGC wis ora digunakake lan bebaya bakal katon yen digunakake.JEP 367: Copot Pack200 Tools lan API
Pack200 minangka format arsip sing dioptimalake kanggo nyimpen file kelas Java sing dikompilasi. Alat iki wis ditandhani ora digunakake wiwit Jawa 11. Saiki alat API pack200, unpack200 lan Pack200 wis resmi diumumake kanggo dibusak saka paket java.util.jar . Teknologi iki dikenalaké maneh ing Jawa 5 minangka sarana kanggo menehi hasil karo bandwidth winates banget (modem, iku medeni ngomong lan elinga, 56k) lan papan panyimpenan ora cukup ing hard drive. Sawetara wektu kepungkur, Java 9 ngenalake skema kompresi anyar. Pangembang disaranake nggunakake jlink .JEP 368: Blok Teks (Preview Kapindho)
Pamblokiran teks pisanan muncul ing Jawa 13. Padha multiline string literals sing nyegah perlu kanggo paling urutan uwal, format otomatis senar, lan uga ngidini pangembang kanggo format senar yen perlu. Fitur migunani iki saiki kasedhiya ing Java 14 (Preview 2). Tujuan utama pamblokiran teks yaiku kanggo nambah penanganan literal multi-line sing mbingungake. Iki nyederhanakake maca lan nulis pitakon SQL, kode HTML lan XML, lan JSON. Tuladha HTML tanpa blok teks:String html = "<html>\n" +
" <body>\n" +
" <p>Hello, JavaRush Student</p>\n" +
" </body>\n" +
"</html>\n";
Cara makili padha karo blok teks:
String html = """
<html>
<body>
<p>Hello, JavaRush Student</p>
</body>
</html>
""";
Wates pambuka yaiku urutan saka telung karakter kuotasi dobel ("" "), ngiring dening nol utawa luwih spasi, banjur delimiter baris. Isi diwiwiti ing karakter pisanan sawise delimiter baris saka delimiter pambuka . urutan saka telung karakter kuotasi pindho " _ ) dipilih supaya karakter bisa ditampilake tanpa uwal, lan uga visual mbedakake blok teks saka string literal. Ing awal 2019, JEP 355 ngusulake blok teks minangka kelanjutan saka JEP 326 (Raw String literals), nanging padha ditarik. Mengko taun kasebut, JDK 13 ngenalake fitur pratinjau blok teks, lan saiki Java 14 wis nambah rong urutan uwal anyar. Iki minangka terminator baris, dilambangake \, lan nomer loro kanggo spasi tunggal, dilambangake / s. Conto nggunakake baris anyar tanpa blok teks:
String literal = "This is major Tom to Ground Control " +
"I am stepping through the door... " +
"Wait… What???";
Lan saiki kanthi urutan uwal \<line-terminator>:
String text = """
This is major Tom to Ground Control \
I am stepping through the door... \
Wait… What???\
""";
Urutan uwal \s digunakake kanggo akun spasi putih mburine, sing ora digatekake dening compiler minangka standar. Iku ngreksa kabeh spasi putih sing sadurunge. Tuladha:
String text1 = """
line1
line2 \s
line3
""";
String text2 = "line1\nline2 \nline3\n";
text1
lan text2
padha.
GO TO FULL VERSION