JavaRush /Blog Jawa /Random-JV /Jawa 14: apa sing anyar?

Jawa 14: apa sing anyar?

Diterbitake ing grup
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. Jawa 14: apa sing anyar?  - 1Ing 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

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
JEP 365 nyedhiyakake dhukungan kanggo ZGC sing wis ana ing Windows, lan uga ing mode eksperimen. Kaya ing ngisor iki:
  • 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... \
                WaitWhat???\
                """;
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";
text1lan text2padha.

JEP 370: API Akses Memori Asing (Inkubator)

Akeh perpustakaan lan program Java populer duwe akses menyang memori eksternal. Contone, Ignite, MapDB, Memcached lan Netty ByteBuf API. Kanthi mengkono, padha bisa supaya biaya lan unpredictability gadhah koleksi uwuh (utamané nalika porsi caches gedhe), nuduhake memori ing sawetara pangolahan, lan serialize lan deserialize isi memori dening pemetaan file ing memori (Contone, nggunakake mmap). Nanging, API Jawa isih ora duwe solusi sing cocog kanggo ngakses memori eksternal. JDK 14 kalebu pratinjau API Akses Memori Asing , sing ngidini aplikasi Java ngakses wilayah memori kanthi aman lan efisien ing njaba tumpukan JVM nggunakake abstraksi MemorySegment, MemoryAddress, lan MemoryLayout anyar.

kesimpulan

Dadi apa sampeyan mikir? Dibandhingake karo Jawa 13, Jawa anyar 14 nawakake akeh dandan sing luwih penting ing macem-macem wilayah. Paling penting, sing paling penting kanggo pangembang yaiku saklar sing dianyari, pangecualian NullPointerExceptions lan cathetan lengkap. Apa ora?.. Aja lali nyoba fitur anyar Java 14, migunani banget sanajan kanggo pemula. Good luck kanggo sinau!
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION