Java SE 17 ngabebaskeun

Saatos genep bulan pangwangunan, Oracle parantos ngarilis Java SE 17 (Java Platform, Standard Edition 17), anu ngagunakeun proyék open source OpenJDK salaku palaksanaan rujukan. Iwal ngaleupaskeun sababaraha fitur deprecated, Java SE 17 mertahankeun kasaluyuan mundur kalawan release saméméhna tina platform Java-proyék Java paling ditulis saméméhna bakal tetep jalan tanpa modifikasi lamun ngajalankeun dina versi anyar. Wangunan Java SE 17 anu tiasa dipasang (JDK, JRE, sareng Server JRE) disiapkeun pikeun Linux (x86_64, AArch64), Windows (x86_64), sareng macOS (x86_64, AArch64). Dimekarkeun ku proyék OpenJDK, palaksanaan rujukan Java 17 dibuka sapinuhna dina lisénsi GPLv2 kalawan iwal GNU ClassPath pikeun ngidinan linking dinamis kana produk komérsial.

Java SE 17 digolongkeun salaku sékrési Long Term Support (LTS), anu bakal terus nampi apdet dugi ka 2029. Pembaruan pikeun pelepasan milestone Java 16 sateuacana parantos dileungitkeun. Cabang LTS Java 11 saméméhna bakal dirojong dugi ka 2026. Pelepasan LTS salajengna dijadwalkeun pikeun Séptémber 2024. Hayu urang ngingetan yén dimimitian ku sékrési Java 10, proyék pindah ka prosés pangwangunan anyar, implying siklus pondok pikeun formasi release anyar. Pungsi anyar ayeuna dikembangkeun dina hiji cabang master anu terus diropéa, anu kalebet parobihan anu siap-siap sareng cabang mana cabangna unggal genep bulan pikeun nyaimbangkeun sékrési énggal.

Fitur anyar dina Java 17 kalebet:

  • Palaksanaan ékspérimén pikeun cocog pola dina "switch" éksprési diusulkeun, anu ngamungkinkeun ngagunakeun nilai teu pasti dina labél "kasus", tapi témplat fléksibel nutupan runtuyan nilai sakaligus, nu saméméhna perlu ngagunakeun pajeulit. rante babasan “lamun...lain”. Salaku tambahan, "switch" gaduh kamampuan pikeun nanganan nilai NULL. Obyék o = 123L; String formatna = switch (o) {kasus Integer i -> String.format("int%d", i); kasus Panjang l -> String.format("panjang%d", l); kasus Double d -> String.format("ganda%f", d); kasus String s -> String.format("String%s", s); standar -> o.toString(); };
  • Rojongan stabil pikeun kelas disegel jeung interfaces, nu teu bisa dipaké ku kelas sejen tur interfaces pikeun inherit, manjangkeun, atawa override palaksanaan. Kelas anu disegel ogé nyayogikeun cara anu langkung déklaratif pikeun ngawatesan panggunaan superclass tibatan modifier aksés, dumasar kana daptar sacara eksplisit subkelas anu diidinan pikeun ekstensi. pakét com.example.geometry; kelas disegel umum Bentuk idin com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.simple.Square {…}
  • A sawangan kadua API Véktor diusulkeun, nu nyadiakeun fungsi pikeun itungan vektor nu dieksekusi maké instruksi vektor on x86_64 na prosesor AArch64 sarta ngidinan operasi pikeun dilarapkeun sakaligus ka sababaraha nilai (SIMD). Beda sareng kamampuan anu disayogikeun dina kompiler HotSpot JIT pikeun otomatis-vektorisasi operasi skalar, API anyar ngamungkinkeun sacara eksplisit ngadalikeun vektorisasi pikeun ngolah data paralel.
  • Ditambahkeun sawangan ngeunaan Fungsi Asing & Mémori API, anu ngamungkinkeun aplikasi pikeun berinteraksi sareng kode sareng data di luar runtime Java. API anyar ngidinan Anjeun pikeun éfisién nelepon fungsi non-JVM sarta aksés memori non-JVM-junun. Contona, anjeun tiasa nelepon fungsi ti perpustakaan dibagikeun éksternal sarta data prosés aksés tanpa ngagunakeun JNI.
  • Mesin rendering macOS anu ngawasa Java 2D API, anu salajengna ngawasa Swing API, parantos diadaptasi pikeun ngagunakeun API grafik Metal. Platform macOS terus nganggo OpenGL sacara standar, sareng ngaktipkeun pangrojong Metal merlukeun setelan "-Dsun.java2d.metal=true" sareng sahenteuna ngajalankeun macOS 10.14.x.
  • Nambahkeun port pikeun platform macOS/AArch64 (komputer Apple dumasar kana chip Apple M1 anyar). A fitur husus tina port nyaéta rojongan pikeun W ^ X (Tulis XOR Execute) mékanisme panyalindungan memori, nu kaca memori teu bisa sakaligus diakses keur nulis jeung palaksanaan. (kode bisa dieksekusi ngan sanggeus tulisan ditumpurkeun, jeung nulis ka kaca memori mungkin ngan sanggeus palaksanaan ditumpurkeun).
  • Dibalikkeun ka ukur nganggo semantik strictfp pikeun éksprési titik ngambang. Rojongan pikeun semantik "standar", sadia saprak sékrési Java 1.2, geus dilanjutkeun, kaasup nyederhanakeun pikeun gawé dina sistem kalawan coprocessors math x87 pisan heubeul (sanggeus Advent parentah SSE2, kabutuhan semantik tambahan ngiles).
  • Jenis anyar tina interfaces mun Generators angka pseudorandom geus dilaksanakeun, sarta algoritma tambahan geus dilaksanakeun pikeun generasi hadé tina angka acak. Aplikasi dibéré kasempetan pikeun milih hiji algoritma pikeun ngahasilkeun angka pseudorandom. Ningkatkeun dukungan pikeun ngahasilkeun aliran obyék acak.
  • Enkapsulasi anu ketat pikeun sadaya internal JDK, iwal API kritis sapertos sun.misc.Unsafe. Enkapsulasi ketat meungpeuk usaha tina kode pikeun ngaksés kelas internal, metode, sareng widang. Saméméhna, mode enkapsulasi ketat bisa ditumpurkeun ngagunakeun pilihan "--illegal-access=permit", tapi ieu geus deprecated. Aplikasi anu ngabutuhkeun aksés ka kelas internal, metode, sareng widang kedah sacara eksplisit netepkeunana nganggo pilihan --add-opens atanapi atribut Add-Opens dina file manifest.
  • Aplikasi dibéré kamampuan pikeun nangtukeun saringan deserialization data, anu tiasa sénsitip kana kontéks sareng dipilih sacara dinamis dumasar kana operasi deserialization khusus. saringan nu dieusian lumaku pikeun sakabéh mesin virtual (JVM-lega), i.e. nyertakeun henteu ngan ukur aplikasi sorangan, tapi ogé perpustakaan pihak katilu anu dianggo dina aplikasi éta.
  • Swing parantos nambihan metode javax.swing.filechooser.FileSystemView.getSystemIcon pikeun ngamuat ikon ageung pikeun ningkatkeun UI dina layar DPI Tinggi.
  • API java.net.DatagramSocket nyadiakeun pangrojong pikeun nyambungkeun ka grup Multicast tanpa butuh java.net.MulticastSocket API misah.
  • Utilitas IGV (Idéal Graph Visualizer) parantos ningkat, nyayogikeun visualisasi interaktif ngeunaan perwakilan kode perantara dina kompiler HotSpot VM C2 JIT.
  • Dina JavaDoc, ku analogi sareng kompiler javac, nalika kasalahan kaluaran, jumlah garis masalah dina file sumber sareng lokasi kasalahan ayeuna dituduhkeun.
  • Nambahkeun sipat native.encoding, ngagambarkeun nami encoding karakter sistem (UTF-8, koi8-r, cp1251, jsb).
  • Antarbeungeut java.time.InstantSource parantos ditambahkeun, ngamungkinkeun manipulasi waktos tanpa ngarujuk kana zona waktos.
  • Ditambahkeun java.util.HexFormat API pikeun ngarobah kana ngagambarkeun hexadecimal sarta sabalikna.
  • A mode blackhole geus ditambahkeun kana compiler nu, nu disables operasi éliminasi maot-kode, nu bisa dipaké nalika ngalakonan tés kinerja.
  • Ditambahkeun pilihan "-Xlog: async" ka Runtime pikeun ngarékam log dina modeu asinkron.
  • Nalika nyieun sambungan aman, TLS 1.3 diaktipkeun sacara standar (saméméhna TLS 1.2 dipaké).
  • API Applet anu didéklarasikeun saméméhna luntur (java.applet.Applet*, javax.swing.JApplet), anu dipaké pikeun ngajalankeun aplikasi Java dina browser, geus dipindahkeun kana kategori anu dijadwalkeun pikeun dihapus (leungit relevansi sanggeus ahir rojongan. pikeun plugin Java pikeun browser).
  • Manajer Kaamanan, anu parantos lami kaleungitan relevansina sareng tétéla henteu diklaim saatos dukungan pikeun plugin browser, parantos dipindahkeun kana kategori anu dijadwalkeun pikeun dihapus.
  • Mékanisme aktivasina RMI parantos dileungitkeun, anu luntur, diturunkeun kana kategori pilihan dina Java 8 sareng ampir henteu pernah dianggo dina prakték modern.
  • Kompiler ékspérimén anu ngadukung JIT (just-in-time) pikeun kompilasi dinamis kode Java pikeun HotSpot JVM, ogé mode kompilasi antisipatif (AOT, sateuacanna) kelas kana kode mesin sateuacan ngamimitian mesin virtual. , geus dihapus tina SDK. Compiler ieu ditulis dina Java sarta dumasar kana karya proyék Graal. Ieu dicatet yén pangropéa compiler merlukeun loba kuli, nu teu diyakinkeun lamun euweuh paménta ti developer.

sumber: opennet.ru

Tambahkeun komentar