Etter seks mΓ₯neder med utvikling, ga Oracle ut Java SE 18 (Java Platform, Standard Edition 18), som bruker OpenJDK Γ₯pen kildekode-prosjektet som referanseimplementering. Med unntak av fjerning av noen foreldede funksjoner, opprettholder Java SE 18 bakoverkompatibilitet med tidligere utgivelser av Java-plattformen - de fleste tidligere skrevne Java-prosjekter vil fungere uten endringer nΓ₯r de kjΓΈres under den nye versjonen. Klar til Γ₯ installere bygg av Java SE 18 (JDK, JRE og Server JRE) er forberedt for Linux (x86_64, AArch64), Windows (x86_64) og macOS (x86_64, AArch64). Java 18-referanseimplementeringen er utviklet av OpenJDK-prosjektet og er fullstendig Γ₯pen kildekode under GPLv2-lisensen, med GNU ClassPath-unntak som tillater dynamisk kobling med kommersielle produkter.
Java SE 18 er klassifisert som en generell stΓΈtteutgivelse og vil fortsette Γ₯ motta oppdateringer til neste utgivelse. Long Term Support (LTS)-grenen bΓΈr vΓ¦re Java SE 17, som vil fortsette Γ₯ motta oppdateringer frem til 2029. La oss minne deg pΓ₯ at fra og med utgivelsen av Java 10, gikk prosjektet over til en ny utviklingsprosess, noe som innebar en kortere syklus for dannelsen av nye utgivelser. Ny funksjonalitet utvikles nΓ₯ i Γ©n konstant oppdatert hovedgren, som inkluderer ferdige endringer og hvor grener forgrenes hvert halvΓ₯r for Γ₯ stabilisere nye utgivelser.
Nye funksjoner i Java 18 inkluderer:
- ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π·Π°Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°Π½Π° ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠ° UTF-8. Java API, ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΠΈΠ΅ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Ρ ΡΡΡΡΠΎΠΌ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², ΡΠ΅ΠΏΠ΅ΡΡ Π±ΡΠ΄ΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ UTF-8 Π½Π° Π²ΡΠ΅Ρ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°Ρ , Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ Π½Π°ΡΡΡΠΎΠ΅ΠΊ ΠΈ Π²ΡΡΡΠ°Π²Π»Π΅Π½Π½ΠΎΠΉ Π»ΠΎΠΊΠ°Π»ΠΈ. ΠΠ»Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΈΡ ΡΡΠ°ΡΠΎΠ³ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠ° Π²ΡΠ±ΠΈΡΠ°Π΅ΡΡΡ Ρ ΡΡΡΡΠΎΠΌ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠΉ Π»ΠΎΠΊΠ°Π»ΠΈ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Β«-Dfile.encoding=COMPATΒ».
- Π ΡΠΎΡΡΠ°Π² Π²ΠΊΠ»ΡΡΡΠ½ ΠΏΠ°ΠΊΠ΅Ρ com.sun.net.httpserver, Π² ΠΊΠΎΡΠΎΡΡΡ Π²Ρ ΠΎΠ΄ΠΈΡ ΡΡΠΈΠ»ΠΈΡΠ° jwebserver ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΡΠ½ΡΠΉ API Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ http-ΡΠ΅ΡΠ²Π΅ΡΠ° Π΄Π»Ρ ΠΎΡΠ΄Π°ΡΠΈ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ° (CGI ΠΈ servlet-ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ). ΠΡΡΡΠΎΠ΅Π½Π½ΡΠΉ http-ΡΠ΅ΡΠ²Π΅Ρ Π½Π΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΠΈΡ Π½Π°Π³ΡΡΠ·ΠΎΠΊ ΠΈ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π΄ΠΎΡΡΡΠΏΠΎΠΌ ΠΈ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π½Π°ΡΠ΅Π»Π΅Π½ Π³Π»Π°Π²Π½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΡΠΎΡΠΎΡΠΈΠΏΠΎΠ², ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ².
- Π JavaDoc ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠ΅Π³Π° Β«@snippetΒ» Π΄Π»Ρ Π²ΡΡΡΠ°ΠΈΠ²Π°Π½ΠΈΡ ΡΠ°Π±ΠΎΡΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² ΠΈ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠΎΠ² ΠΊΠΎΠ΄Π° Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π½Π° API, ΠΊ ΠΊΠΎΡΠΎΡΡΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΡΡΠ΅Π΄ΡΡΠ²Π° Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΡΡΠΈ, ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΊΠΈ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° ΠΈ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ Ρ IDE.
- ΠΠ΅ΡΠ΅Π΄Π΅Π»Π°Π½Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ API java.lang.reflect (Core Reflection), ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°Ρ , ΠΏΠΎΠ»ΡΡ ΠΈ ΠΊΠΎΠ½ΡΡΡΠΊΡΠΎΡΠ°Ρ ΠΊΠ»Π°ΡΡΠΎΠ², Π° ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π²Π½ΡΡΡΠ΅Π½Π½Π΅ΠΉ ΡΡΡΡΠΊΡΡΡΠ΅ ΠΊΠ»Π°ΡΡΠΎΠ². Π‘Π°ΠΌ API java.lang.reflect ΠΎΡΡΠ°Π»ΡΡ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π΅Π½, Π½ΠΎ ΡΠ΅ΠΏΠ΅ΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΡΠ΅ΡΠ΅Π· ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠ² ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² (method handles), ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΌ java.lang.invoke, Π²ΠΌΠ΅ΡΡΠΎ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠΎΠ² Π±Π°ΠΉΡΠΊΠΎΠ΄Π°. ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ ΡΠ½ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ java.lang.reflect ΠΈ java.lang.invoke, ΠΈ ΡΠΏΡΠΎΡΡΠΈΡΡ ΠΈΡ ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅.
- ΠΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Π° ΡΡΠ΅ΡΡΡ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ API Vector, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡΠ΅Π³ΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ Π²Π΅ΠΊΡΠΎΡΠ½ΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π²Π΅ΠΊΡΠΎΡΠ½ΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠ² x86_64 ΠΈ AArch64 ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΡΠ°Π·Ρ ΠΊ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌ (SIMD). Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌΡΡ Π² JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ΅ HotSpot Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ ΠΏΠΎ Π°Π²ΡΠΎΠ²Π΅ΠΊΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ ΡΠΊΠ°Π»ΡΡΠ½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ, Π½ΠΎΠ²ΡΠΉ API Π΄Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ²Π½ΠΎ ΡΠΏΡΠ°Π²Π»ΡΡΡ Π²Π΅ΠΊΡΠΎΡΠΈΠ·Π°ΡΠΈΠ΅ΠΉ Π΄Π»Ρ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π΄Π°Π½Π½ΡΡ .
- ΠΠΎΠ±Π°Π²Π»Π΅Π½ SPI-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ (service-provider interface) Π΄Π»Ρ ΡΠ΅Π·ΠΎΠ»Π²ΠΈΠ½Π³Π° ΠΈΠΌΡΠ½ Ρ ΠΎΡΡΠΎΠ² ΠΈ IP-Π°Π΄ΡΠ΅ΡΠΎΠ², ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ Π·Π°Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ Π² java.net.InetAddress Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΡΠ΅ ΡΠ΅Π·ΠΎΠ»Π²Π΅ΡΡ, Π½Π΅ ΠΏΡΠΈΠ²ΡΠ·Π°Π½Π½ΡΠ΅ ΠΊ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ, ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΠΌΡΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ.
- ΠΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Π° Π²ΡΠΎΡΠ°Ρ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ API Foreign Function & Memory, ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ Ρ ΠΊΠΎΠ΄ΠΎΠΌ ΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ, Π½Π°Ρ ΠΎΠ΄ΡΡΠΈΠΌΠΈΡΡ Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Π°ΠΌΠΈ Java runtime. ΠΠΎΠ²ΡΠΉ API ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ, Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠ΅ Π½Π΅ Π² JVM, ΠΈ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ ΠΏΠ°ΠΌΡΡΠΈ, Π½Π΅ ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΠΎΠΉ JVM. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΠ· Π²Π½Π΅ΡΠ½ΠΈΡ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΠΈ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ Π΄Π°Π½Π½ΡΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ° Π±Π΅Π· ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ JNI.
- ΠΠΎΠ±Π°Π²Π»Π΅Π½Π° Π²ΡΠΎΡΠ°Ρ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»ΡΠ½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΠΎ ΡΠ°Π±Π»ΠΎΠ½Ρ Π² Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡΡ Β«switchΒ», ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠ°Ρ Π² ΠΌΠ΅ΡΠΊΠ°Ρ Β«caseΒ» ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½Π΅ ΡΠΎΡΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Π° Π³ΠΈΠ±ΠΊΠΈΠ΅ ΡΠ°Π±Π»ΠΎΠ½Ρ, ΠΎΡ Π²Π°ΡΡΠ²Π°ΡΡΠΈΠ΅ ΡΡΠ°Π·Ρ ΡΠ΅ΡΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ ΡΠ°Π½Π΅Π΅ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΠ»ΠΎΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π³ΡΠΎΠΌΠΎΠ·Π΄ΠΊΠΈΠ΅ ΡΠ΅ΠΏΠΎΡΠΊΠΈ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Β«ifβ¦elseΒ». Object 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); default -> o.toString(); };
- ΠΠ±ΡΡΠ²Π»Π΅Π½ ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠΌ ΠΈ Π±ΡΠ΄Π΅Ρ ΠΎΡΠΊΠ»ΡΡΡΠ½ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΡΠ»Π΅Π΄ΡΡΡΠΈΡ Π²ΡΠΏΡΡΠΊΠΎΠ² ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΡΠΈΠ½Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ Π½ΠΈΠΌ ΠΌΠ΅ΡΠΎΠ΄Ρ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Object.finalize(), Enum.finalize(), Runtime.runFinalization() ΠΈ System.runFinalization().
- Π ΡΠ±ΠΎΡΡΠΈΠΊΠ°Ρ ΠΌΡΡΠΎΡΠ° ZGC (Z Garbage Collector), SerialGC ΠΈ ParallelGC ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π΄Π΅Π΄ΡΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ ΡΡΡΠΎΠΊ.
Kilde: opennet.ru