Pas gjashtë muajsh zhvillimi, kompania Oracle platformën (Java Platform, Standard Edition 14), me projekti referencë e cila është përdorur për implementimin e saj është projekti hapur OpenJDK. Në Java SE 14 ruhet kompatibiliteti prapa me versionet e kaluara të platformës Java, të gjitha projektet Java të shkruara më parë do të funksionojnë pa ndryshime nën menaxhimin e versionit të ri. Grumbullimet gatishmëri për instalim të Java SE 14 (JDK, JRE dhe Server JRE) për Linux (x86_64), Windows dhe macOS. Implementimi referencë i zhvilluar në kuadër të projektit OpenJDK është plotësisht i hapur nën licencën GPLv2 me përjashtime të GNU ClassPath, që lejojnë lidhjen dinamike me produkte komerciale.
Java SE 14 i përket kategorisë së lëshimeve me mbështetje normale, përditësime për të cilat do të lëshohen deri në lëshimin e ardhshëm. Si një degë me mbështetje afatgjatë (LTS), duhet përdorur Java SE 11, përditësime për të cilat do të lëshohen deri në vitin 2026. Dega e kaluar LTS Java 8 do të mbështetet deri në Dhjetor 2020. Lëshimi i ardhshëm LTS është planifikuar për Shtator 2021. Të kujtojmë se që nga lëshimi i Java 10, projekti është kaluar në një proces të ri zhvillimi, që përfshin një cikël më të shkurtër formimi të lëshimeve të reja. Funksionaliteti i ri tani zhvillohet në një degë master që përditësohet vazhdimisht, në të cilën përfshihen ndryshime tashmë të gatshme dhe nga e cila çdo gjashtë muaj ndahen degë për stabilizimin e lëshimeve të reja.
Nga :
- ĂshtĂ« shtuar mbĂ«shtetje eksperimentale nĂ« operatorin "instanceof", i cili lejon menjĂ«herĂ« tĂ« definihet njĂ« variabĂ«l lokale pĂ«r tĂ« aksesuar vlerĂ«n e kontrolluar. PĂ«r shembull, mund tĂ« shkruhet menjĂ«herĂ« "if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}" pa nevojĂ«n pĂ«r definimin e qartĂ« "String s = (String) obj."
Ishte:
if (obj instanceof Group) {
Group group = (Group) obj;
var entries = group.getEntries();
}Tani mund të kalojmë pa definimin "Group group = (Group) obj":
if (obj instanceof Group group) {
var entries = group.getEntries();
} - ĂshtĂ« shtuar mbĂ«shtetje eksperimentale pĂ«r fjalorin e ri "", duke ofruar njĂ« formĂ« kompakte pĂ«r tĂ« pĂ«rcaktuar klasat, qĂ« lejon kalimin pa definimin e qartĂ« tĂ« metodave tĂ« ndryshme tĂ« nivelit tĂ« ulĂ«t, si equals(), hashCode() dhe toString(), nĂ« rastet kur tĂ« dhĂ«nat ruhet vetĂ«m nĂ« fushat, sjellja e tĂ« cilave nuk ndryshon. Kur nĂ« klasĂ« pĂ«rdoren implementimet tipike tĂ« metodave equals(), hashCode() dhe toString(), mund tĂ« kalojmĂ« pa definimin e tyre tĂ« qartĂ«:
public record BankTransaction(LocalDate date,
double amount,
String description) {}Kjo deklaratë do të çojë në shtimin automatik të implementimeve të metodave equals(), hashCode() dhe toString() përveç konstruktorit dhe metodave që kontrollojnë ndryshimin e të dhënave (getter).
- dhe është aktivizuar si parazgjedhje mbështetje për formën e re të shprehjeve "switch", që nuk kërkon specifikimin e operatorit "break", duke lejuar kombimin e etiketimeve të përsëritura dhe duke mundësuar përdorimin jo vetëm si operator, por edhe si shprehje.
var log = switch (event) {
case PLAY -> "Kënga ka aktivizuar butonin e luajtjes";
case STOP, PAUSE -> "Përdoruesi ka nevojë për një pushim";
default -> {
String message = event.toString();
LocalDateTime now = LocalDateTime.now();
yield "Ngjarje e panjohur " + message +
" e regjistruar më " + now;
}
}; - ĂshtĂ« zgjeruar mbĂ«shtetje eksperimentale â pĂ«r formĂ«n e re tĂ« literave tĂ« vargut, duke lejuar pĂ«rfshirjen e tĂ« dhĂ«nave tekstuale me shumĂ« rreshta nĂ« kodin burimor pa pĂ«rdorimin e karaktereve tĂ« eklipsit dhe duke ruajtur formatimin origjinal tĂ« tekstit nĂ« bllok. Kufizimi i bllokut bĂ«het me tre cita tĂ« dyfishta. NĂ« Java 14, nĂ« blloqet tekstuale Ă«shtĂ« implementuar mbĂ«shtetje pĂ«r sekuencĂ«n e eklipsit "\s" pĂ«r tĂ« pĂ«rcaktuar njĂ« hap dhe "\" pĂ«r tĂ« pĂ«rfituar me rreshtin tjetĂ«r (injorimi i kalimit tĂ« rreshtit, kur duhet tĂ« shfaqet njĂ« varg shumĂ« tĂ« gjatĂ«). PĂ«r shembull, nĂ« vend tĂ« kodit
String html = "" +
"\n\t" + "" +
"\n\t\t" + "\"Java 14 është këtu!\"" +
"\n\t" + "" +
"\n" + "";mund të specifikohet:
String html = """
<HTML>
<BODY>"Java 14\
është këtu!"
<\/BODY>
"""; - Informacioni dijagnostikë është zgjeruar prilikom shfaqjes së përjashtimeve . Nëse më parë mesazhi i gabimit i referohej vetëm numrit të rreshtit, tani u detajizohet se cili nga metodat shkaktoi përjashtimin. Diagnostika e zgjeruar aktivizohet vetëm kur ekzekutohet me flamurin «-XX:+ShowCodeDetailsInExceptionMessages». Për shembull, me caktimin e këtij flamuri, përjashtimi në rreshtin
var name = user.getLocation().getCity().getName();
do të rezultojë në shfaqjen e mesazhit
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)që lejon të kuptohet se metoda Location.getCity() nuk u thirr, dhe User.getLocation() ktheu një vlerë null.
- versioni paraprak i utilitarit jpackage, që lejon krijimin e paketave për aplikacione Java të vetë-mjaftueshme (self-contained). Utilitari bazohet në javapackager nga JavaFX dhe lejon formimin e paketave në formate nativas për platforma të ndryshme (msi dhe exe për Windows, pkg dhe dmg për macOS, deb dhe rpm për Linux). Paketat përfshijnë të gjitha varësitë e nevojshme.
- Në mbledhësin e integrimit G1 është një mekanizëm i ri i shpërndarjes së memories, që merr parasysh specifikat e punës në sisteme të mëdha që përdorin arkitekturën . Shpërndarësi i ri i memories aktivizohet me flamurin «+XX:+UseNUMA» dhe lejon një rritje të konsiderueshme të performancës në sistemet NUMA.
- API për ndjekjen e ngjarjeve JFR (JDK Flight Recorder) në kohë reale, për shembull për organizimin e monitorimit të vazhdueshëm.
- moduli jdk.nio.mapmode, që ofron mënyra të reja (READ_ONLY_SYNC, WRITE_ONLY_SYNC) për krijimin e buferave të mapuar (MappedByteBuffer), që referohen në memorien e brezit të energjisë (NVM).
- versioni paraprak i API Foreign-Memory Access, që lejon aplikacionet Java të kenë qasje të sigurt dhe efikase në zonat e memories jashtë grumbullit Java, duke manipuluar abstraksionet e reja MemorySegment, MemoryAddress dhe MemoryLayout.
- portal tĂ« vjetra pĂ«r OS Solaris dhe procesorĂ«t SPARC (Solaris/SPARC, Solaris/x64 dhe Linux/SPARC) me qĂ«llimin e heqjes sĂ« kĂ«tyre porteve nĂ« tĂ« ardhmen. Kalimi i kĂ«tyre porteve nĂ« statusin e vjetruar do tâi lejojĂ« komunitetit tĂ« nxitojĂ« zhvillimin e mundĂ«sive tĂ« reja OpenJDK, pa humbur kohĂ« nĂ« mbĂ«shtetje tĂ« veçorive specifike pĂ«r Solaris dhe SPARC.
- mbledhĂ«si i plehrave CMS (Concurrent Mark Sweep), i cili dy vjet mĂ« parĂ« u shenjtua si i vjetruar dhe mbeti pa mbĂ«shtetje (nĂ« vend tĂ« CMS ka ardhur mbledhĂ«si i plehrave G1). PĂ«r mĂ« tepĂ«r, pĂ«rdorimi i kombinimeve tĂ« zakonshme tĂ« algoritmeve tĂ« mbledhjes sĂ« plehrave ParallelScavenge dhe SerialOld (nisja me opsionet â-XX:+UseParallelGC -XX:-UseParallelOldGCâ).
- ĂshtĂ« siguruar mbĂ«shtetje eksperimentale pĂ«r mbledhĂ«sin e plehrave ZGC (Z Garbage Collector) nĂ« platformat macOS dhe Windows (mĂ« parĂ« ishte mbĂ«shtetur vetĂ«m nĂ« Linux). ZGC punon nĂ« njĂ« mod tĂ« pasivizuar, sa mĂ« shumĂ« qĂ« Ă«shtĂ« e mundur, minimizon vonesat pĂ«r shkak tĂ« mbledhjes sĂ« plehrave (koha e ndalimit gjatĂ« pĂ«rdorimit tĂ« ZGC nuk kalon 10 ms.) dhe mund tĂ« punojĂ« si me kupa tĂ« vogla ashtu edhe me kupa tĂ« mĂ«dha, nga disa qindra megabajt deri nĂ« shumĂ« terabajt.
- instrumenti dhe API për kompresimin e skedarëve JAR duke përdorur algoritmin Pack200.
Burimi: opennet.ru
