Na zes maanden ontwikkeling heeft Oracle het platform (Java Platform, Standard Edition 14), waarvan de referentie-implementatie het open-source project OpenJDK is. Java SE 14 behoudt de terugwaartse compatibiliteit met eerdere versies van het Java-platform, alle eerder geschreven Java-projecten zullen zonder aanpassingen functioneren op de nieuwe versie. Klaar-voor-installatie pakketten Java SE 14 (JDK, JRE en Server JRE) voor Linux (x86_64), Windows en macOS. De referentie-implementatie, ontwikkeld binnen het OpenJDK-project, is volledig open onder de GPLv2-licentie met uitzonderingen van GNU ClassPath, die dynamisch linken met commerciƫle producten toestaan.
Java SE 14 wordt geclassificeerd als een release met een standaardondersteuningstermijn, updates voor deze versie zullen worden vrijgegeven tot de volgende release. Voor een langetermijnondersteuneing (LTS) moet Java SE 11 worden gebruikt, waarvan de updates tot 2026 zullen worden vrijgegeven. De vorige LTS-tak, Java 8, zal worden ondersteund tot december 2020. De volgende LTS-release staat gepland voor september 2021. Ter herinnering, vanaf release 10 is het project overgestapt op een nieuw ontwikkelingsproces, dat kortere ontwikkelingscycli voor nieuwe releases omvat. Nieuwe functionaliteit wordt nu ontwikkeld in ƩƩn continu bijgewerkte master-tak, waarin al beschikbare wijzigingen worden opgenomen en waarvan om de zes maanden takken voor stabilisatie van nieuwe releases worden afgeleid.
Uit :
- Experimentele ondersteuning is toegevoegd voor met de operator 'instanceof', waarmee je direct een lokale variabele kunt definiƫren voor toegang tot de gecontroleerde waarde. Bijvoorbeeld, je kunt direct schrijven "if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}" zonder expliciete definitie van "String s = (String) obj".
Was:
if (obj instanceof Group) {
Group group = (Group) obj;
var entries = group.getEntries();
}Nu kun je zonder de definitie "Group group = (Group) obj".
if (obj instanceof Group group) {
var entries = group.getEntries();
} - Experimentele ondersteuning is toegevoegd voor het nieuwe sleutelwoord "", dat een compacte vorm biedt voor het definiƫren van klassen, zodat je kunt vermijden dat je verschillende laagdrempelige methoden zoals equals(), hashCode() en toString() expliciet hoeft te definiƫren, in gevallen waarin de gegevens alleen in velden worden opgeslagen, waarvan het gedrag ongewijzigd blijft. Wanneer de typische implementaties van de methoden equals(), hashCode() en toString() in een klasse worden gebruikt, is er geen expliciete definitie nodig:
public record BankTransaction(LocalDate date,
double amount,
String description) {}Deze aankondiging zal leiden tot de automatische toevoeging van implementaties van de methoden equals(), hashCode() en toString() naast de constructor en de methoden die de gegevenswijziging controleren (getter).
- En is standaard ondersteuning voor de nieuwe expressie "switch" ingeschakeld, die geen "break" operator vereist, waardoor het mogelijk is om herhalende labels te combineren en die niet alleen als een statement, maar ook als expressie kan worden gebruikt.
var log = switch (event) {
case PLAY -> "De gebruiker heeft de afspeelknop ingedrukt";
case STOP, PAUSE -> "De gebruiker heeft een pauze nodig";
default -> {
String message = event.toString();
LocalDateTime now = LocalDateTime.now();
yield "Onbekende gebeurtenis " + message +
" gelogd op " + now;
}
}; - Uitgebreide experimentele ondersteuning ā voor de nieuwe vorm van string literals, die het mogelijk maakt om meerdere regels tekst zonder karakter escaping in de broncode op te nemen en de oorspronkelijke opmaak van de tekst in het blok te behouden. Een blok wordt omgeven door drie dubbele aanhalingstekens. In Java 14 is ondersteuning van de escape-sequentie "\s" voor het definiĆ«ren van ƩƩn spatie en "\" voor het samenvoegen met de volgende regel geĆÆmplementeerd (om de nieuwe regel te negeren wanneer een zeer lange regel moet worden weergegeven). Bijvoorbeeld, in plaats van de code
String html = "" +
"\n\t" + "" +
"\n\t\t" + "\"Java 14 is here!\"</H1>" +
"\n\t" + "" +
"\n" + "";kan worden aangegeven:
String html = """
<HTML>
<BODY>"Java 14\
is here!"
</BODY>
"""; - De diagnostiek bij het optreden van uitzonderingen is verbreed . Waar eerder de foutmelding alleen naar het regelnummer verwees, wordt nu gedetailleerd welke methode de uitzondering heeft veroorzaakt. De uitgebreide diagnose kan momenteel alleen worden ingeschakeld bij het starten met de vlag "-XX:+ShowCodeDetailsInExceptionMessages". Bijvoorbeeld, bij het opgeven van deze vlag zal de uitzondering op regel
var name = user.getLocation().getCity().getName();
een foutmelding geven
Exception in thread "main" java.lang.NullPointerException: Kan "Location.getCity()" niet aanroepen
omdat de retourneerde waarde van "User.getLocation()" null is
at NullPointerExample.main(NullPointerExample.java:5):5)wat impliceert dat de methode Location.getCity() niet is aangeroepen en User.getLocation() een null-waarde heeft geretourneerd.
- een voorlopige versie van de jpackage-hulpmiddel, dat het mogelijk maakt om pakketten te maken voor zelfstandig werkende (self-contained) Java-toepassingen. Het hulpmiddel is gebaseerd op javapackager van JavaFX en stelt in staat om pakketten te vormen in indelingen die passen bij verschillende platforms (msi en exe voor Windows, pkg en dmg voor macOS, deb en rpm voor Linux). Pakketten bevatten alle benodigde afhankelijkheden.
- In de G1 garbage collector een nieuw geheugenverdelingsmechanisme dat rekening houdt met de specifieke werking op grote systemen die gebruikmaken van architectuur . De nieuwe geheugenverdeler wordt ingeschakeld met de vlag ā+XX:+UseNUMAā en kan de prestaties op NUMA-systemen aanzienlijk verbeteren.
- API voor het real-time volgen van JFR (JDK Flight Recorder) gebeurtenissen, bijvoorbeeld voor de organisatie van continue monitoring.
- module jdk.nio.mapmode die nieuwe modi (READ_ONLY_SYNC, WRITE_ONLY_SYNC) biedt voor het creƫren van weergegeven bytebuffers (MappedByteBuffer) die verwijzen naar niet-vluchtig geheugen (NVM).
- een voorlopige versie van de API Foreign-Memory Access die Java-applicaties in staat stelt veilig en effectief toegang te krijgen tot geheugenruimtes buiten de Java-heap, met nieuwe abstracties zoals MemorySegment, MemoryAddress en MemoryLayout.
- verouderde poorten voor het besturingssysteem Solaris en SPARC-processors (Solaris/SPARC, Solaris/x64 en Linux/SPARC) met de bedoeling deze poorten in de toekomst te verwijderen. Het labelen van de genoemde poorten als verouderd zal de gemeenschap in staat stellen de ontwikkeling van nieuwe mogelijkheden voor OpenJDK te versnellen, zonder tijd te besteden aan het onderhouden van functies die specifiek zijn voor Solaris en SPARC.
- de garbage collector CMS (Concurrent Mark Sweep) die twee jaar geleden als verouderd werd aangemerkt en niet meer wordt ondersteund (de garbage collector G1 heeft de afgelopen tijd de plaats van CMS ingenomen). Daarnaast, is het gebruik van een combinatie van garbage collection-algoritmen ParallelScavenge en SerialOld (met de opties ā-XX:+UseParallelGC -XX:-UseParallelOldGCā) verouderd.
- Experimentele ondersteuning voor de garbage collector ZGC (Z Garbage Collector) is nu beschikbaar op macOS- en Windows-platforms (voorheen alleen ondersteund op Linux). ZGC werkt in een passieve modus en minimaliseert zoveel mogelijk de vertraging door garbage collection (de stilstandstijd bij het gebruik van ZGC overschrijdt niet meer dan 10 ms.) en kan zowel werken met kleine als met enorme heaps, variƫrend van enkele honderden megabytes tot vele terabytes.
- toolkit en API voor het comprimeren van JAR-bestanden met het algoritme Pack200.
Bron: opennet.ru
