ืžื”ื“ื•ืจืช Java SE 20

ืœืื—ืจ ืฉื™ืฉื” ื—ื•ื“ืฉื™ื ืฉืœ ืคื™ืชื•ื—, ืื•ืจืงืœ ืฉื—ืจืจื” ืืช ืคืœื˜ืคื•ืจืžืช Java SE 20 (Java Platform, Standard Edition 20), ื”ืžืฉืชืžืฉืช ื‘ืคืจื•ื™ืงื˜ ื”ืงื•ื“ ื”ืคืชื•ื— OpenJDK ื›ื™ื™ืฉื•ื ื™ื™ื—ื•ืก. ืœืžืขื˜ ื”ืกืจืช ื—ืœืง ืžื”ืชื›ื•ื ื•ืช ืฉื”ื•ืฆืื• ืžืฉื™ืžื•ืฉ, Java SE 20 ืฉื•ืžืจ ืขืœ ืชืื™ืžื•ืช ืœืื—ื•ืจ ืขื ืžื”ื“ื•ืจื•ืช ืงื•ื“ืžื•ืช ืฉืœ ืคืœื˜ืคื•ืจืžืช Java - ืจื•ื‘ ืคืจื•ื™ืงื˜ื™ ื”-Java ืฉื ื›ืชื‘ื• ื‘ืขื‘ืจ ืขื“ื™ื™ืŸ ื™ืคืขืœื• ืœืœื ืฉื™ื ื•ื™ ื›ืืฉืจ ื”ื ืคื•ืขืœื™ื ืชื—ืช ื”ื’ืจืกื” ื”ื—ื“ืฉื”. ื‘ื ื™ื™ื” ื ื™ืชื ืช ืœื”ืชืงื ื” ืฉืœ Java SE 20 (JDK, JRE ื•ืฉืจืช JRE) ืžื•ื›ื ื•ืช ืขื‘ื•ืจ Linux (x86_64, AArch64), Windows (x86_64) ื•-macOS (x86_64, AArch64). ืžื™ืžื•ืฉ ื”ื”ืชื™ื™ื—ืกื•ืช ืฉืœ Java 20, ืฉืคื•ืชื— ืขืœ ื™ื“ื™ ืคืจื•ื™ืงื˜ OpenJDK, ืคืชื•ื— ื‘ืžืœื•ืื• ืชื—ืช ืจื™ืฉื™ื•ืŸ GPLv2 ืขื ื—ืจื™ื’ื™ื ืฉืœ GNU ClassPath ื›ื“ื™ ืœืืคืฉืจ ืงื™ืฉื•ืจ ื“ื™ื ืžื™ ืœืžื•ืฆืจื™ื ืžืกื—ืจื™ื™ื.

Java SE 20 ืžืกื•ื•ื’ืช ื›ื’ืจืกืช ืชืžื™ื›ื” ืจื’ื™ืœื”, ืขื ืขื“ื›ื•ื ื™ื ืฉื™ืฉื•ื—ืจืจื• ืœืคื ื™ ื”ืžื”ื“ื•ืจื” ื”ื‘ืื”. ืขื ืฃ ื”ืชืžื™ื›ื” ืœื˜ื•ื•ื— ืืจื•ืš (LTS) ืฆืจื™ืš ืœื”ื™ื•ืช Java SE 17, ืฉื™ืงื‘ืœ ืขื“ื›ื•ื ื™ื ืขื“ 2029. ื ื–ื›ื™ืจ ื›ื™ ื”ื—ืœ ืžื”ืฉื—ืจื•ืจ ืฉืœ Java 10, ื”ืคืจื•ื™ืงื˜ ืขื‘ืจ ืœืชื”ืœื™ืš ืคื™ืชื•ื— ื—ื“ืฉ, ืืฉืจ ืžืจืžื– ืขืœ ืžื—ื–ื•ืจ ืงืฆืจ ื™ื•ืชืจ ืœื”ื™ื•ื•ืฆืจื•ืช ืžื”ื“ื•ืจื•ืช ื—ื“ืฉื•ืช. ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ื—ื“ืฉื” ืžืคื•ืชื—ืช ื›ืขืช ื‘ืกื ื™ืฃ ืžืืกื˜ืจ ืื—ื“ ื”ืžืชืขื“ื›ืŸ ื›ืœ ื”ื–ืžืŸ, ื”ืžืฉืœื‘ ืฉื™ื ื•ื™ื™ื ืฉื›ื‘ืจ ื”ื•ืฉืœืžื• ื•ืžืžื ื• ืžืกืชืขืคื™ื ืกื ื™ืคื™ื ื›ืœ ื—ืฆื™ ืฉื ื” ื›ื“ื™ ืœื™ื™ืฆื‘ ืžื”ื“ื•ืจื•ืช ื—ื“ืฉื•ืช.

ืชื›ื•ื ื•ืช ื—ื“ืฉื•ืช ื‘-Java 20 ื›ื•ืœืœื•ืช:

  • ื”ื•ืฆืขื” ืชืžื™ื›ื” ืจืืฉื•ื ื™ืช ืขื‘ื•ืจ Scoped Values, ื”ืžืืคืฉืจืช ืฉื™ืชื•ืฃ ื ืชื•ื ื™ื ื‘ืœืชื™ ื ื™ืชื ื™ื ืœืฉื™ื ื•ื™ ื‘ืฉืจืฉื•ืจื™ื ื•ื”ื—ืœืคื” ื™ืขื™ืœื” ืฉืœ ื ืชื•ื ื™ื ื‘ื™ืŸ ืฉืจืฉื•ืจื™ ืฆืืฆื (ืขืจื›ื™ื ืขื•ื‘ืจื™ื ื‘ื™ืจื•ืฉื”). ืขืจื›ื™ื ื‘ื”ื™ืงืฃ ืžืคื•ืชื—ื™ื ื›ื“ื™ ืœื”ื—ืœื™ืฃ ืืช ืžื ื’ื ื•ืŸ ื”ืžืฉืชื ื™ื ื”ืžืงื•ืžื™ื™ื ืฉืœ ื”ืฉืจืฉื•ืจ ื•ื”ื ื™ืขื™ืœื™ื ื™ื•ืชืจ ื‘ืขืช ืฉื™ืžื•ืฉ ื‘ืžืกืคืจื™ื ื’ื“ื•ืœื™ื ืžืื•ื“ ืฉืœ ืฉืจืฉื•ืจื™ื ื•ื™ืจื˜ื•ืืœื™ื™ื (ืืœืคื™ ื•ืžื™ืœื™ื•ื ื™ ืฉืจืฉื•ืจื™ื). ื”ื”ื‘ื“ืœ ื”ืขื™ืงืจื™ ื‘ื™ืŸ ืขืจื›ื™ื ื‘ื”ื™ืงืฃ ืœืžืฉืชื ื™ื ืžืงื•ืžื™ื™ื ื”ื•ื ืฉื”ืจืืฉื•ื ื™ื ื ื›ืชื‘ื™ื ืคืขื ืื—ืช, ืœื ื ื™ืชื ื™ื ืœืฉื™ื ื•ื™ ืžืื•ื—ืจ ื™ื•ืชืจ ื•ื ื•ืชืจื™ื ื–ืžื™ื ื™ื ืจืง ืœืžืฉืš ื‘ื™ืฆื•ืข ื”ืฉืจืฉื•ืจ. class Server { final static ScopedValue CURRENT_USER = new ScopedValue(); void serve(Request request, Response response) { var level = (request. isAuthorized()? ADMIN : GUEST); var user = ืžืฉืชืžืฉ ื—ื“ืฉ (ืจืžื”); ScopedValue.where(CURRENT_USER, ืžืฉืชืžืฉ) .run(() -> Application.handle(request, response)); } } class DatabaseManager { DBConnection open() { var user = Server.CURRENT_USER.get(); if (!user.canOpen()) ื–ืจื•ืง ื—ื“ืฉ InvalidUserException(); ื”ื—ื–ืจ DBConnection ื—ื“ืฉ (...); } }
  • ื™ื™ืฉื•ื ื–ืžื ื™ ืฉื ื™ ืฉืœ ื“ืคื•ืกื™ ืจืฉื•ืžื•ืช ื ื•ืกืฃ, ื”ืžืจื—ื™ื‘ ืืช ื™ื›ื•ืœืช ื”ืชืืžืช ื”ื“ืคื•ืกื™ื ืฉืœ Java 16 ืœื ืชื— ืืช ื”ืขืจื›ื™ื ืฉืœ ืžื—ืœืงื•ืช ืฉืœ ืจืฉื•ืžื•ืช ืžืกื•ื’. ืœื“ื•ื’ืžื”: record Point(int x, int y) {} static void printSum(Object obj) { if (instanceof Point p) { int x = px(); int y = py(); System.out.println(x+y); } }
  • ื ื•ืกืคื” ื™ื™ืฉื•ื ืจืืฉื•ื ื™ ืจื‘ื™ืขื™ ืฉืœ ื”ืชืืžืช ื“ืคื•ืกื™ื ื‘ื‘ื™ื˜ื•ื™ื™ ืžืชื’, ื”ืžืืคืฉืจ ืฉื™ืžื•ืฉ ื‘ืชื‘ื ื™ื•ืช ื’ืžื™ืฉื•ืช ื‘ืชื•ื•ื™ื•ืช ืžืงืจื” ื”ืžื›ืกื•ืช ืกื“ืจื” ืฉืœ ืขืจื›ื™ื ื‘ื•-ื–ืžื ื™ืช, ืฉืขื‘ื•ืจืŸ ื ืขืฉื” ืฉื™ืžื•ืฉ ื‘ืขื‘ืจ ื‘ืฉืจืฉืจืื•ืช ืžืกื•ืจื‘ืœื•ืช ืฉืœ ื”ืฆื”ืจื•ืช if...else. static String formatterPatternSwitch(Object obj) { return switch (obj) { 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("ืžื—ืจื•ื–ืช %s", s); ื‘ืจื™ืจืช ืžื—ื“ืœ -> o.toString(); }; }
  • ื ื•ืกืคื” ื™ื™ืฉื•ื ืจืืฉื•ื ื™ ืฉื ื™ ืฉืœ FFM (Foreign Function & Memory) API, ื”ืžืืคืฉืจ ืœืš ืœืืจื’ืŸ ืืช ื”ืื™ื ื˜ืจืืงืฆื™ื” ืฉืœ ืชื•ื›ื ื™ื•ืช Java ืขื ืงื•ื“ ื•ื ืชื•ื ื™ื ื—ื™ืฆื•ื ื™ื™ื ื‘ืืžืฆืขื•ืช ืงืจื™ืื” ืœืคื•ื ืงืฆื™ื•ืช ืžืกืคืจื™ื•ืช ื—ื™ืฆื•ื ื™ื•ืช ื•ื’ื™ืฉื” ืœื–ื™ื›ืจื•ืŸ ืžื—ื•ืฅ ืœ-JVM.
  • ื ื•ืกืคื” ื™ื™ืฉื•ื ืจืืฉื•ื ื™ ืฉื ื™ ืฉืœ ืคืชื™ืœื™ื ื•ื™ืจื˜ื•ืืœื™ื™ื, ืฉื”ื ืคืชื™ืœื™ื ืงืœื™ื ืฉืžืคืฉื˜ื™ื ืžืื•ื“ ื›ืชื™ื‘ื” ื•ืชื—ื–ื•ืงื” ืฉืœ ื™ื™ืฉื•ืžื™ื ืžืจื•ื‘ื™ ืคืชื™ืœื™ื ื‘ืขืœื™ ื‘ื™ืฆื•ืขื™ื ื’ื‘ื•ื”ื™ื.
  • ื’ืจืกื” ืฉื ื™ื™ื” ืฉืœ ื”-API ื”ื ื™ืกื™ื•ื ื™ ืฉืœ Structured Parallelism API ื ื•ืกืคื” ื›ื“ื™ ืœืคืฉื˜ ืืช ื”ืคื™ืชื•ื— ืฉืœ ื™ื™ืฉื•ืžื™ื ืžืจื•ื‘ื™ื ืขืœ ื™ื“ื™ ื”ืชื™ื™ื—ืกื•ืช ืœืžืกืคืจ ืžืฉื™ืžื•ืช ื”ืคื•ืขืœื•ืช ืขืœ ืฉืจืฉื•ืจื™ื ืฉื•ื ื™ื ื›ื™ื—ื™ื“ื” ืื—ืช.
  • ื ื•ืกืคื” ื™ื™ืฉื•ื ืจืืฉื•ื ื™ ื—ืžื™ืฉื™ ืฉืœ ื”-Vector API, ื”ืžืกืคืง ืคื•ื ืงืฆื™ื•ืช ืœื—ื™ืฉื•ื‘ื™ื ื•ืงื˜ื•ืจื™ื™ื ื”ืคื•ืขืœื™ื ื‘ืืžืฆืขื•ืช ื”ื•ืจืื•ืช ื”ื•ื•ืงื˜ื•ืจ ืฉืœ ืžืขื‘ื“ื™ x86_64 ื•-AArch64 ื•ืžืืคืฉืจื•ืช ืœืš ืœื”ื—ื™ืœ ืคืขื•ืœื•ืช ื‘ื•-ื–ืžื ื™ืช ืขืœ ืžืกืคืจ ืขืจื›ื™ื (SIMD). ื‘ื ื™ื’ื•ื“ ืœื™ื›ื•ืœื•ืช ื”ื ื™ืชื ื•ืช ื‘ืžื”ื“ืจ HotSpot JIT ืœ-Autovectorization ืฉืœ ืคืขื•ืœื•ืช ืกืงืœืจื™ื•ืช, ื”-API ื”ื—ื“ืฉ ืžืืคืฉืจ ืœืฉืœื•ื˜ ื‘ืื•ืคืŸ ืžืคื•ืจืฉ ื‘-Vectorization ืขื‘ื•ืจ ืขื™ื‘ื•ื“ ื ืชื•ื ื™ื ืžืงื‘ื™ืœื™.

ืžืงื•ืจ: OpenNet.ru

ื”ื•ืกืคืช ืชื’ื•ื‘ื”