ΠΠΎΡΠ»Π΅ ΡΠ΅ΡΡΠΈ ΠΌΠ΅ΡΡΡΠ΅Π² ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ Oracle
Java SE 14 ΠΎΡΠ½Π΅ΡΡΠ½ ΠΊ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ Π²ΡΠΏΡΡΠΊΠΎΠ² Ρ ΠΎΠ±ΡΡΠ½ΡΠΌ ΡΡΠΎΠΊΠΎΠΌ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ, ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π±ΡΠ΄ΡΡ Π²ΡΠΏΡΡΠΊΠ°ΡΡΡΡ Π΄ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΡΠ΅Π»ΠΈΠ·Π°. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π²Π΅ΡΠΊΠΈ Ρ Π΄Π»ΠΈΡΠ΅Π»ΡΠ½ΡΠΌ ΡΡΠΎΠΊΠΎΠΌ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ (LTS) ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Java SE 11, ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π±ΡΠ΄ΡΡ Π²ΡΠΏΡΡΠΊΠ°ΡΡΡΡ Π΄ΠΎ 2026 Π³ΠΎΠ΄Π°. ΠΡΠΎΡΠ»Π°Ρ LTS-Π²Π΅ΡΠΊΠ° Java 8 Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ Π΄ΠΎ Π΄Π΅ΠΊΠ°Π±ΡΡ 2020 Π³ΠΎΠ΄Π°. Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ LTS-ΡΠ΅Π»ΠΈΠ· Π½Π°ΠΌΠ΅ΡΠ΅Π½ Π½Π° ΡΠ΅Π½ΡΡΠ±ΡΡ 2021 Π³ΠΎΠ΄Π°. ΠΠ°ΠΏΠΎΠΌΠ½ΠΈΠΌ, ΡΡΠΎ Π½Π°ΡΠΈΠ½Π°Ρ Ρ Π²ΡΠΏΡΡΠΊΠ° Java 10 ΠΏΡΠΎΠ΅ΠΊΡ ΠΏΠ΅ΡΠ΅ΡΡΠ» Π½Π° Π½ΠΎΠ²ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ, ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°ΡΡΠΈΠΉ Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΡΠΎΡΠΊΠΈΠΉ ΡΠΈΠΊΠ» ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½ΠΎΠ²ΡΡ ΡΠ΅Π»ΠΈΠ·ΠΎΠ². ΠΠΎΠ²Π°Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ ΡΠ΅ΠΏΠ΅ΡΡ ΡΠ°Π·Π²ΠΈΠ²Π°Π΅ΡΡΡ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΠΌΠΎΠΉ master-Π²Π΅ΡΠΊΠ΅, Π² ΠΊΠΎΡΠΎΡΡΡ Π²ΠΊΠ»ΡΡΠ°ΡΡΡΡ ΡΠΆΠ΅ Π³ΠΎΡΠΎΠ²ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΈ ΠΎΡ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠ°Π· Π² ΡΠ΅ΡΡΡ ΠΌΠ΅ΡΡΡΠ΅Π² ΠΎΡΠ²Π΅ΡΠ²Π»ΡΡΡΡΡ Π²Π΅ΡΠΊΠΈ Π΄Π»Ρ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·Π°ΡΠΈΠΈ Π½ΠΎΠ²ΡΡ Π²ΡΠΏΡΡΠΊΠΎΠ².
ΠΠ·
- ΠΠΎΠ±Π°Π²Π»Π΅Π½Π° ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»ΡΠ½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ°
ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ c ΠΎΠ±ΡΠ°Π·ΡΠΎΠΌ Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ΅ «instanceof», ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΡΠ°Π·Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π΄Π»Ρ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊ ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½Π½ΠΎΠΌΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠ°Π·Ρ ΠΏΠΈΡΠ°ΡΡ «if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}» Π±Π΅Π· ΡΠ²Π½ΠΎΠ³ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ «String s = (String) obj».ΠΡΠ»ΠΎ:
if (obj instanceof Group) {
Group group = (Group) obj;
var entries = group.getEntries();
}Π’Π΅ΠΏΠ΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡΠΈΡΡ Π±Π΅Π· ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ «Group group = (Group) obj»:
if (obj instanceof Group group) {
var entries = group.getEntries();
} - ΠΠΎΠ±Π°Π²Π»Π΅Π½Π° ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»ΡΠ½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° «
record «, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡΠ΅Π³ΠΎ ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠ½ΡΡ ΡΠΎΡΠΌΡ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ², ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΡΡ ΠΎΠ±ΠΎΠΉΡΠΈΡΡ Π±Π΅Π· ΡΠ²Π½ΠΎΠ³ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ equals(), hashCode() ΠΈ toString(), Π² ΡΠ»ΡΡΠ°ΡΡ , ΠΊΠΎΠ³Π΄Π° Π΄Π°Π½Π½ΡΠ΅ ΡΠΎΡ ΡΠ°Π½ΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΏΠΎΠ»ΡΡ , ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΠ°Π±ΠΎΡΡ Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ Π½Π΅ ΠΌΠ΅Π½ΡΠ΅ΡΡΡ. ΠΠΎΠ³Π΄Π° Π² ΠΊΠ»Π°ΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠΈΠΏΠΎΠ²ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² equals(), hashCode() ΠΈ toString(), Π² Π½ΡΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡΠΈΡΡ Π±Π΅Π· ΠΈΡ ΡΠ²Π½ΠΎΠ³ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ:public record BankTransaction(LocalDate date,
double amount,
String description) {}ΠΠ°Π½Π½ΠΎΠ΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΈΠ²Π΅Π΄ΡΡ ΠΊ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΉ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² equals(), hashCode() ΠΈ toString() Π² Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡ ΠΈ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌ, ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΡΡΡΠΈΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ (getter).
-
Π‘ΡΠ°Π½Π΄Π°ΡΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π° ΠΈ Π²ΠΊΠ»ΡΡΠ΅Π½Π° ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π½ΠΎΠ²ΠΎΠΉ ΡΠΎΡΠΌΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ «switch», Π½Π΅ ΡΡΠ΅Π±ΡΡΡΠ΅ΠΉ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° «break», ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠ΅ΠΉ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΡΡ ΠΏΠΎΠ²ΡΠΎΡΡΡΡΠΈΠ΅ΡΡ ΠΌΠ΅ΡΠΊΠΈ ΠΈ Π΄ΠΎΠΏΡΡΠΊΠ°ΡΡΠ΅ΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠΎΡΠΌΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ°, Π½ΠΎ ΠΈ ΠΊΠ°ΠΊ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ.var log = switch (event) {
case PLAY -> «User has triggered the play button»;
case STOP, PAUSE -> «User needs a break»;
default -> {
String message = event.toString();
LocalDateTime now = LocalDateTime.now();
yield «Unknown event » + message +
» logged on » + now;
}
}; - Π Π°ΡΡΠΈΡΠ΅Π½Π° ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»ΡΠ½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ°
ΡΠ΅ΠΊΡΡΠΎΠ²ΡΡ Π±Π»ΠΎΠΊΠΎΠ² — Π½ΠΎΠ²ΠΎΠΉ ΡΠΎΡΠΌΡ ΡΡΡΠΎΠΊΠΎΠ²ΡΡ Π»ΠΈΡΠ΅ΡΠ°Π»ΠΎΠ², ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΡ Π²ΠΊΠ»ΡΡΠ°ΡΡ Π² ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΌΠ½ΠΎΠ³ΠΎΡΡΡΠΎΡΠ½ΡΠ΅ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π±Π΅Π· ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² Π½ΠΈΡ ΡΠΊΡΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΈ ΡΠΎΡ ΡΠ°Π½ΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ΅ ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅ΠΊΡΡΠ° Π² Π±Π»ΠΎΠΊΠ΅. ΠΠ±ΡΠ°ΠΌΠ»Π΅Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠ° ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠ΅ΠΌΡ Π΄Π²ΠΎΠΉΠ½ΡΠΌΠΈ ΠΊΠ°Π²ΡΡΠΊΠ°ΠΌΠΈ. Π Java 14 Π² ΡΠ΅ΠΊΡΡΠΎΠ²ΡΡ Π±Π»ΠΎΠΊΠ°Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° escape-ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ «\s» Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ±Π΅Π»Π° ΠΈ «\» Π΄Π»Ρ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΡΡΠΎΠΊΠΎΠΉ (ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π° ΡΡΡΠΎΠΊΠΈ, ΠΊΠΎΠ³Π΄Π° Π½ΡΠΆΠ½ΠΎ Π²ΡΠ²Π΅ΡΡΠΈ ΠΎΡΠ΅Π½Ρ Π΄Π»ΠΈΠ½Π½ΡΡ ΡΡΡΠΎΠΊΡ). ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΠΌΠ΅ΡΡΠΎ ΠΊΠΎΠ΄Π°String html = «<HTML>» +
«\n\t» + «<BODY>» +
«\n\t\t» + «<H1>\»Java 14 is here!\»</H1>» +
«\n\t» + «</BODY>» +
«\n» + «</HTML>»;ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ:
String html = «»»
<HTML>
<BODY>
<H1>»Java 14\
is here!»</H1>
</BODY>
</HTML>»»»; - Π Π°ΡΡΠΈΡΠ΅Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ²Π½ΠΎΡΡΡ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΠΈ ΠΏΡΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ
NullPointerException . ΠΡΠ»ΠΈ ΡΠ°Π½ΡΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ Π»ΠΈΡΡ ΡΡΡΠ»Π°Π»ΠΎΡΡ Π½Π° Π½ΠΎΠΌΠ΅Ρ ΡΡΡΠΎΠΊΠΈ, ΡΠΎ ΡΠ΅ΠΏΠ΅ΡΡ Π² Π½ΡΠΌ Π΄Π΅ΡΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ· ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π²ΡΠ·Π²Π°Π» ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅. Π Π°ΡΡΠΈΡΠ΅Π½Π½Π°Ρ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΠ° ΠΏΠΎΠΊΠ° Π²ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ Ρ ΡΠ»Π°Π³ΠΎΠΌ «-XX:+ShowCodeDetailsInExceptionMessages». ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ ΡΠΊΠ°Π·Π°Π½ΠΈΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ»Π°Π³Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π² ΡΡΡΠΎΠΊΠ΅var name = user.getLocation().getCity().getName();
ΠΏΡΠΈΠ²Π΅Π΄ΡΡ ΠΊ Π²ΡΠ²ΠΎΠ΄Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ
Exception in thread «main» java.lang.NullPointerException: Cannot invoke «Location.getCity()»
because the return value of «User.getLocation()» is null
at NullPointerExample.main(NullPointerExample.java:5):5)ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΠ½ΡΡΡ, ΡΡΠΎ ΠΌΠ΅ΡΠΎΠ΄ Location.getCity() Π½Π΅ Π±ΡΠ» Π²ΡΠ·Π²Π°Π½, Π° User.getLocation() Π²Π΅ΡΠ½ΡΠ» Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ null.
-
Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΡΡΠΈΠ»ΠΈΡΡ jpackage, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠ΅ΠΉ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΏΠ°ΠΊΠ΅ΡΡ Π΄Π»Ρ ΡΠ°ΠΌΠΎΠ΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΡΡ (self-contained) Java-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π£ΡΠΈΠ»ΠΈΡΠ° Π±Π°Π·ΠΈΡΡΠ΅ΡΡΡ Π½Π° javapackager ΠΈΠ· JavaFX ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠ°ΠΊΠ΅ΡΡ Π² ΡΠΎΡΠΌΠ°ΡΠ°Ρ , ΡΠΎΠ΄Π½ΡΡ Π΄Π»Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌ (msi ΠΈ exe Π΄Π»Ρ Windows, pkg ΠΈ dmg Π΄Π»Ρ macOS, deb ΠΈ rpm Π΄Π»Ρ Linux). ΠΠ°ΠΊΠ΅ΡΡ Π²ΠΊΠ»ΡΡΠ°ΡΡ Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ. - Π ΡΠ±ΠΎΡΡΠΈΠΊ ΠΌΡΡΠΎΡΠ° G1
Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π½ΠΎΠ²ΡΠΉ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΠ°ΠΌΡΡΠΈ, ΡΡΠΈΡΡΠ²Π°ΡΡΠΈΠΉ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΡ ΡΠ°Π±ΠΎΡΡ Π½Π° ΠΊΡΡΠΏΠ½ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ , ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΡ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡNUMA . ΠΠΎΠ²ΡΠΉ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ ΠΏΠ°ΠΌΡΡΠΈ Π²ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΠ»Π°Π³Π° «+XX:+UseNUMA» ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ ΠΏΠΎΠ΄Π½ΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π½Π° NUMA-ΡΠΈΡΡΠ΅ΠΌΠ°Ρ . -
ΠΠΎΠ±Π°Π²Π»Π΅Π½ API Π΄Π»Ρ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ Π½Π° Π»Π΅ΡΡ ΡΠΎΠ±ΡΡΠΈΠΉ JFR (JDK Flight Recorder), Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π΄Π»Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ Π½Π΅ΠΏΡΠ΅ΡΡΠ²Π½ΠΎΠ³ΠΎ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π°. -
ΠΠΎΠ±Π°Π²Π»Π΅Π½ ΠΌΠΎΠ΄ΡΠ»Ρ jdk.nio.mapmode, ΠΏΡΠ΅Π΄Π»Π°Π³Π°ΡΡΠΈΠΉ Π½ΠΎΠ²ΡΠ΅ ΡΠ΅ΠΆΠΈΠΌΡ (READ_ONLY_SYNC, WRITE_ONLY_SYNC) Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΠΌΡΡ Π±Π°ΠΉΡΠΎΠ²ΡΡ Π±ΡΡΠ΅ΡΠΎΠ² (MappedByteBuffer), ΡΡΡΠ»Π°ΡΡΠΈΡ ΡΡ Π½Π° ΡΠ½Π΅ΡΠ³ΠΎΠ½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΡ ΠΏΠ°ΠΌΡΡΡ (NVM). -
Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ API Foreign-Memory Access, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ Java-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ ΠΈ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΎΠ±Π»Π°ΡΡΡΠΌ ΠΏΠ°ΠΌΡΡΠΈ, Π²Π½Π΅ ΠΊΡΡΠΈ Java, ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΡΡ Π½ΠΎΠ²ΡΠΌΠΈ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΡΠΌΠΈ MemorySegment, MemoryAddress ΠΈ MemoryLayout. -
ΠΠ±ΡΡΠ²Π»Π΅Π½Ρ ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠΌΠΈ ΠΏΠΎΡΡΡ Π΄Π»Ρ ΠΠ‘ Solaris ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠ² SPARC (Solaris/SPARC, Solaris/x64 ΠΈ Linux/SPARC) c Π½Π°ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ΄Π°Π»ΠΈΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΏΠΎΡΡΡ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ. ΠΠ΅ΡΠ΅Π²ΠΎΠ΄ ΡΠΊΠ°Π·Π°Π½Π½ΡΡ ΠΏΠΎΡΡΠΎΠ² Π² ΡΠ°Π·ΡΡΠ΄ ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Ρ ΡΡΠΊΠΎΡΠΈΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΡ Π½ΠΎΠ²ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ OpenJDK, Π½Π΅ ΡΡΠ°ΡΡ Π²ΡΠ΅ΠΌΡ Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠ΅ΠΉ, ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΡΡ Π΄Π»Ρ Solaris ΠΈ SPARC. -
Π£Π΄Π°Π»ΡΠ½ ΡΠ±ΠΎΡΡΠΈΠΊ ΠΌΡΡΠΎΡΠ° CMS (Concurrent Mark Sweep), ΠΊΠΎΡΠΎΡΡΠΉ Π΄Π²Π° Π³ΠΎΠ΄Π° Π½Π°Π·Π°Π΄ Π±ΡΠ» ΠΎΡΠΌΠ΅ΡΠ΅Π½ ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠΌ ΠΈ ΠΎΡΡΠ°Π»ΡΡ Π±Π΅Π· ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π΅Π½ΠΈΡ (Π½Π° ΡΠΌΠ΅Π½Ρ CMS Π΄Π°Π²Π½ΠΎ ΠΏΡΠΈΡΡΠ» ΡΠ±ΠΎΡΡΠΈΠΊ ΠΌΡΡΠΎΡΠ° G1). ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ,ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΎ ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² ΡΠ±ΠΎΡΠΊΠΈ ΠΌΡΡΠΎΡΠ° ParallelScavenge ΠΈ SerialOld (Π·Π°ΠΏΡΡΠΊ Ρ ΠΎΠΏΡΠΈΡΠΌΠΈ «-XX:+UseParallelGC -XX:-UseParallelOldGC»). - ΠΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½Π° ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»ΡΠ½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠ±ΠΎΡΡΠΈΠΊΠ° ΠΌΡΡΠΎΡΠ° ZGC (Z Garbage Collector) Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°Ρ macOS ΠΈ Windows (ΡΠ°Π½Π΅Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π»ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² Linux). ZGC ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π² ΠΏΠ°ΡΡΠΈΠ²Π½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΡΠ΅Ρ Π·Π°Π΄Π΅ΡΠΆΠΊΠΈ ΠΈΠ·-Π·Π° ΡΠ±ΠΎΡΠΊΠΈ ΠΌΡΡΠΎΡΠ° (Π²ΡΠ΅ΠΌΡ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ZGC Π½Π΅ ΠΏΡΠ΅Π²ΡΡΠ°Π΅Ρ 10 ΠΌΡ.) ΠΈ ΠΌΠΎΠΆΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΊΠ°ΠΊ Ρ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΠΌΠΈ, ΡΠ°ΠΊ ΠΈ Ρ ΠΎΠ³ΡΠΎΠΌΠ½ΡΠΌΠΈ ΠΊΡΡΠ°ΠΌΠΈ, ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ ΠΎΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠΎΡΠ΅Π½ ΠΌΠ΅Π³Π°Π±Π°ΠΉΡ Π΄ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΠ΅ΡΠ°Π±Π°ΠΉΡ.
-
Π£Π΄Π°Π»Π΅Π½Ρ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ ΠΈ API Π΄Π»Ρ ΡΠΆΠ°ΡΠΈΡ JAR-ΡΠ°ΠΉΠ»ΠΎΠ² Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° Pack200.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: opennet.ru