Sawisé nem sasi pangembangan, Oracle wis ngrilis platform Java SE 17 (Java Platform, Standard Edition 17), sing migunakaké proyèk OpenJDK sumber terbuka minangka implementasi referensi. Kajaba mbusak sawetara fitur sing wis ora digunakaké, Java SE 17 njaga kompatibilitas mundur karo rilis platform Java sadurungé—umumé proyèk Java sing wis ditulis sadurungé bakal mlaku tanpa owah nalika mlaku ing versi anyar. Build Java SE 17 sing wis siap diinstal (JDK, JRE, lan Server JRE) wis disiapake kanggo Linux (x86_64, AArch64), Windows (x86_64) lan macOS (x86_64, AArch64). Dikembangake dening proyek OpenJDK, implementasi referensi Java 17 minangka sumber terbuka kanthi lengkap miturut lisensi GPLv2 kanthi Pengecualian GNU ClassPath, sing ngidini pranala dinamis karo produk komersial.
Java SE 17 diklasifikasikake minangka rilis Dhukungan Jangka Panjang (LTS), sing bakal terus nampa nganyari nganti 2029. Nganyari kanggo rilis milestone Java 16 sadurunge wis mandheg. Cabang LTS Jawa 11 sadurunge bakal didhukung nganti 2026. Rilis LTS sabanjure dijadwalake ing September 2024. Ayo kita ngelingake yen wiwit rilis Java 10, proyek kasebut ngalih menyang proses pangembangan anyar, tegese siklus sing luwih cendhek kanggo pambentukan rilis anyar. Fungsi anyar saiki dikembangake ing siji cabang master sing terus dianyari, sing kalebu owah-owahan sing wis siap lan cabang-cabang sing dicabang saben nem sasi kanggo nyetabilake rilis anyar.
Fitur anyar ing Java 17 kalebu:
- Implementasi eksperimen saka pencocokan pola ing ekspresi "switch" diusulake, sing ngidini nggunakake nilai sing ora tepat ing label "kasus", nanging template fleksibel sing nutupi sawetara nilai sekaligus, sing sadurunge kudu nggunakake cumbersome. rentengan "yen ... liya". Kajaba iku, "ngalih" nduweni kemampuan kanggo nangani nilai NULL. Obyek o = 123L; String formatted = switch (o) { case Integer i -> String.format("int %d", i); case Long l -> String.format("long %d", l); case Double d -> String.format("double %f",d); case String s -> String.format("String %s", s); standar -> o.toString(); };
- Dhukungan stabil kanggo kelas lan antarmuka sing disegel, sing ora bisa digunakake dening kelas lan antarmuka liyane kanggo entuk warisan, ngluwihi, utawa ngilangi implementasine. Kelas sing disegel uga nyedhiyakake cara sing luwih deklaratif kanggo mbatesi panggunaan superclass tinimbang modifier akses, adhedhasar dhaptar subkelas sing diidini kanggo ekstensi. paket com.example.geometry; kelas sing disegel umum Ijin bentuk com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.simple.Square {…}
- Pratinjau liya saka Vector API diusulake, sing nyedhiyakake fungsi kanggo petungan vektor sing dileksanakake nggunakake instruksi vektor ing prosesor x86_64 lan AArch64 lan ngidini operasi bisa ditrapake bebarengan kanggo sawetara nilai (SIMD). Boten kados kapabilitas kasedhiya ing kompiler HotSpot JIT kanggo otomatis-vektorisasi operasi skalar, API anyar ndadekake iku bisa kanggo tegas kontrol vectorization kanggo Processing data podo.
- Nambahake pratinjau API Fungsi & Memori Asing, sing ngidini aplikasi bisa sesambungan karo kode lan data ing njaba runtime Java. API anyar ngidini sampeyan nelpon fungsi non-JVM kanthi efisien lan ngakses memori sing ora dikelola JVM. Contone, sampeyan bisa nelpon fungsi saka perpustakaan sing dienggo bareng eksternal lan ngakses data proses tanpa nggunakake JNI.
- Mesin rendering kanggo macOS, sing nyedhiyakake Java 2D API, sing banjur digunakake ing Swing API, diadaptasi kanggo nggunakake Metal graphics API. Kanthi gawan, platform kasebut macOS OpenGL isih digunakake, lan ngaktifake dhukungan Metal mbutuhake nyetel parameter "-Dsun.java2d.metal=true" lan paling ora duwe rilis macOS 10.14.x.
- Port sing ditambahake kanggo platform macOS/AArch64 (Komputer Apple adhedhasar chip Apple M1 anyar). Fitur khusus saka port iki yaiku dhukungan kanggo mekanisme proteksi memori W^X (Write XOR Execute), sing nyegah kaca memori supaya ora bisa ditulis lan dieksekusi bebarengan. (Kode mung bisa dieksekusi sawise mateni akses tulis, lan nulis menyang kaca memori mung bisa ditindakake sawise mateni akses eksekusi.)
- Bali menyang nggunakake mung semantik strictfp kanggo ekspresi floating point. Dhukungan kanggo semantik "standar", kasedhiya wiwit release saka Java 1.2, wis mandhek, kalebu simplifications kanggo nggarap sistem karo coprocessors math x87 banget lawas (sawise tekane saka instruksi SSE2, perlu kanggo semantik tambahan ilang).
- Jinis anyar antarmuka kanggo generator nomer pseudorandom wis dipun ginakaken, lan algoritma tambahan wis dipun ginakaken kanggo generasi luwih saka nomer acak. Aplikasi diwenehi kesempatan kanggo milih algoritma kanggo ngasilake nomer pseudorandom. Dhukungan sing luwih apik kanggo ngasilake aliran obyek acak.
- Enkapsulasi ketat dileksanakake kabeh internal JDK, kajaba API kritis kayata sun.misc.Unsafe. Enkapsulasi sing ketat ngalangi upaya saka kode kanggo ngakses kelas internal, metode, lan kolom. Sadurunge, mode enkapsulasi sing ketat bisa dipateni nggunakake opsi "--illegal-access=ijin", nanging saiki wis ora digunakake. Aplikasi sing mbutuhake akses menyang kelas internal, metode, lan kolom kudu ditetepake kanthi jelas nggunakake opsi --add-opens utawa atribut Add-Opens ing file manifest.
- Aplikasi saiki bisa nemtokake filter kanggo deserialisasi data, sing bisa gumantung konteks lan dipilih kanthi dinamis bebarengan karo operasi deserialisasi tartamtu. Filter sing sampeyan nemtokake ditrapake kanggo kabeh mesin virtual (sak kabeh JVM), yaiku ora mung nutupi aplikasi kasebut dhewe, nanging uga pustaka pihak katelu sing digunakake ing aplikasi kasebut.
- Swing wis nambahake cara javax.swing.filechooser.FileSystemView.getSystemIcon kanggo mbukak lambang gedhe kanggo nambah UI ing layar DPI Dhuwur.
- java.net.DatagramSocket API menehi support kanggo nyambungake menyang grup Multicast tanpa perlu java.net.MulticastSocket API kapisah.
- Utilitas IGV (Ideal Graph Visualizer) wis ditingkatake, nyedhiyakake visualisasi interaktif saka perwakilan kode perantara ing kompiler HotSpot VM C2 JIT.
- Ing JavaDoc, kanthi analogi karo compiler javac, nalika ana kesalahan, nomer baris masalah ing file sumber lan lokasi kesalahan saiki dituduhake.
- Nambahake properti native.encoding, nggambarake jeneng enkoding karakter sistem (UTF-8, koi8-r, cp1251, lsp).
- Antarmuka java.time.InstantSource wis ditambahake, ngidini manipulasi wektu tanpa referensi menyang zona wektu.
- Added java.util.HexFormat API kanggo ngowahi kanggo perwakilan heksadesimal lan kosok balene.
- Mode blackhole wis ditambahake ing kompiler, sing mateni operasi penghapusan kode mati, sing bisa digunakake nalika nganakake tes kinerja.
- Nambahake opsi "-Xlog: async" menyang Runtime kanggo ngrekam log ing mode asinkron.
- Nalika nggawe sambungan aman, TLS 1.3 diaktifake kanthi gawan (sadurunge TLS 1.2 digunakake).
- API Applet sing wis diumumake sadurunge (java.applet.Applet*, javax.swing.JApplet), sing digunakake kanggo mbukak aplikasi Java ing browser, wis dipindhah menyang kategori sing dijadwal kanggo dibusak (ilang relevansi sawise mburi dhukungan. kanggo plugin Java kanggo browser).
- Manajer Keamanan, sing wis suwe ilang relevansi lan ora diklaim sawise mburi dhukungan kanggo plugin browser, wis dipindhah menyang kategori sing dijadwal kanggo dibusak.
- Mekanisme Aktivasi RMI wis dibusak, sing wis lawas, diturunake menyang kategori pilihan ing Jawa 8 lan meh ora tau digunakake ing praktik modern.
- Compiler eksperimen sing ndhukung JIT (just-in-time) kanggo kompilasi dinamis kode Java kanggo HotSpot JVM, uga mode kompilasi antisipatif (AOT, ahead-of-time) saka kelas menyang kode mesin sadurunge miwiti mesin virtual. , wis dibusak saka SDK. Compiler iki ditulis ing Jawa lan adhedhasar karya proyek Graal. Kacathet yen pangopènan compiler mbutuhake tenaga kerja sing akeh, sing ora bisa ditrapake nalika ora ana panjaluk saka pangembang.
Source: opennet.ru
