Uitgave van Java SE 16

Na zes maanden ontwikkeling heeft Oracle de Java SE 16 (Java Platform, Standard Edition 16) gelanceerd, waarvan de referentie-implementatie het open-sourceproject OpenJDK is. In Java SE 16 is de achterwaartse compatibiliteit met eerdere versies van het Java-platform behouden; alle eerder geschreven Java-projecten zullen zonder aanpassingen blijven werken onder de nieuwe versie. Kant-en-klare installaties van Java SE 16 (JDK, JRE en Server JRE) zijn voorbereid voor Linux (x86_64, AArch64), Windows en macOS. De referentie-implementatie van Java 16, ontwikkeld binnen het OpenJDK-project, is volledig open onder de GPLv2-licentie met uitzonderingen van GNU ClassPath die dynamische koppeling met commerciƫle producten toestaan.

Java SE 16 valt onder de release met een standaardondersteuningstermijn, waarbij updates zullen worden uitgebracht tot de volgende release. Voor een versie met langdurige ondersteuning (LTS) moet Java SE 11 worden gebruikt, waarvan updates worden uitgebracht tot 2026. De volgende LTS-release staat gepland voor september 2021. Ter herinnering: vanaf de release van Java 10 is het project overgestapt op een nieuw ontwikkelingsproces, dat een kortere cyclus voor de ontwikkeling van nieuwe releases impliceert. Nieuwe functionaliteit wordt nu ontwikkeld in ƩƩn voortdurend bijgewerkte master-branch, waarin al bestaande wijzigingen zijn opgenomen en waar elke zes maanden takken worden gemaakt voor de stabilisatie van nieuwe releases.

Bij de voorbereiding van de nieuwe release is de ontwikkeling overgezet van het versiebeheersysteem Mercurial naar Git en het samenwerkingsplatform GitHub. Verwacht wordt dat deze migratie de prestaties van repositorybewerkingen zal verbeteren, de opslagsefficiƫntie zal verhogen, toegang zal bieden tot wijzigingen gedurende de hele geschiedenis van het project, de ondersteuning voor codebeoordelingen zal verbeteren en de API zal inzetten voor het automatiseren van werkprocessen. Bovendien maakt het gebruik van Git en GitHub het project aantrekkelijker voor nieuwkomers en ontwikkelaars die gewend zijn aan Git.

Enkele nieuwigheden in Java 16 zijn:

  • Een experimentele module jdk.incubator.vector is toegevoegd met een implementatie van de Vector API, die functies biedt voor vectorberekeningen, uitgevoerd met vectorinstructies van x86_64 en AArch64-processoren en waarmee tegelijkertijd bewerkingen op meerdere waarden (SIMD) kunnen worden toegepast. In tegenstelling tot de avocstemingsmogelijkheden voor scalairen die door de JIT-compiler HotSpot worden aangeboden, stelt de nieuwe API gebruikers in staat om de vectorisering voor parallelle gegevensverwerking expliciet te beheren.
  • In de JDK- en VM HotSpot-code, geschreven in C++, zijn de mogelijkheden van de C++14-specificatie toegestaan. Voorheen was alleen gebruik van de C++98/03-standaarden toegestaan.
  • In de ZGC (Z Garbage Collector), die in passieve modus werkt en pertentieel vertragingen door garbage collection minimaliseert, is de mogelijkheid tot parallelle verwerking van threadstapels toegevoegd zonder dat de uitvoering van applicatiedraden wordt onderbroken. In ZGC zijn nu alleen nog maar pauserelated taken overgebleven, die constante vertragingen vereisen, meestal niet langer dan een paar honderd microseconden.
  • Ondersteuning voor Unix-sockets (AF_UNIX) is toegevoegd in de klassen SocketChannel, ServerSocketChannel en java.nio.channels.
  • Er is een poort voor de Linux-distributie Alpine geĆÆmplementeerd met de standaard C-bibliotheek musl, die populair is in containeromgevingen, microservices, cloud- en embedded systemen. De voorgestelde poort in dergelijke omgevingen maakt het mogelijk om Java-programma's als reguliere applicaties uit te voeren. Bovendien kan met jlink alle ongebruikte modules worden verwijderd en kan een minimale omgeving worden gecreĆ«erd die voldoende is voor de uitvoering van de applicatie, wat het mogelijk maakt om compacte afbeeldingen te maken, specifiek voor bepaalde applicaties.
  • Een Elastic Metaspace-mechanisme is geĆÆmplementeerd, dat de operatie van het toewijzen en teruggeven van geheugen dat door klasmetadata (metaspace) in de JVM HotSpot wordt gebruikt, optimaliseert. Het gebruik van Elastic Metaspace vermindert geheugenfragmentatie, verlaagt de overhead in de classloader en heeft bovendien een gunstig effect op de prestaties van langdurig draaiende serverapplicaties door sneller geheugen terug te geven aan het besturingssysteem dat niet-gebruikte klasmetadata in beslag neemt. Voor de selectie van de modus voor het vrijgeven van geheugen na het ontladen van klassen is de optie "-XX:MetaspaceReclaimPolicy=(balanced|aggressive|none)" aangeboden.
  • De JDK-poort is toegevoegd voor Windows-systemen die draaien op hardware met AArch64-architectuur-processors.
  • Een derde voorlopige versie van de API Foreign-Memory Access is voorgesteld, waarmee Java-toepassingen veilig en efficiĆ«nt toegang kunnen krijgen tot geheugenruimten buiten de Java-heap, door gebruik te maken van nieuwe abstracties zoals MemorySegment, MemoryAddress en MemoryLayout.
  • Een experimentele API Foreign Linker is geĆÆmplementeerd, die toegang biedt vanuit Java tot native code. Samen met de API Foreign-Memory vereenvoudigt deze nieuwe interface aanzienlijk het creĆ«ren van wrappers voor standaard gedeelde bibliotheken.
  • De jpackage-tool is toegevoegd, waarmee pakketten voor zelfvoorzienende (self-contained) Java-toepassingen kunnen worden gemaakt. De tool is gebaseerd op javapackager van JavaFX en maakt het mogelijk om pakketten te genereren in formaten die native zijn voor verschillende platforms (msi en exe voor Windows, pkg en dmg voor macOS, deb en rpm voor Linux). Pakketten bevatten alle benodigde afhankelijkheden.
  • Strikte encapsulatie van alle interne JDK-elementen is standaard ingeschakeld, met uitzondering van kritieke API's zoals sun.misc.Unsafe. De waarde van de optie '—illegal-access' is nu standaard ingesteld op 'deny' in plaats van 'permit', wat zal leiden tot het blokkeren van pogingen vanuit de code om toegang te krijgen tot de meeste interne klassen, methoden en velden. Om de beperking te omzeilen, moet de optie '—illegal-access=permit' worden gebruikt.
  • De implementatie van patroonmatching in de 'instanceof'-operator is gestabiliseerd, waardoor het mogelijk is om direct een lokale variabele te bepalen voor toegang tot de gevalideerde waarde. Bijvoorbeeld, je kunt nu schrijven 'if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}' zonder expliciet 'String s = (String) obj' te definiĆ«ren. Vroeger: if (obj instanceof Group) { Group group = (Group) obj; var entries = group.getEntries(); } Nu kan het zonder 'Group group = (Group) obj' worden gedefinieerd: if (obj instanceof Group group) { var entries = group.getEntries(); }
  • De implementatie van het sleutelwoord 'record' is gestabiliseerd, wat een compacte manier biedt om klassen te definiĆ«ren zonder expliciet verschillende laag-niveau methoden zoals equals(), hashCode() en toString() te definiĆ«ren, in gevallen waarin de gegevens alleen in velden worden opgeslagen, en het gedrag van deze velden onveranderd blijft. Wanneer de standaardimplementaties van de methoden equals(), hashCode() en toString() in een klasse worden gebruikt, kan het zonder expliciete definitie ervan: 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).

  • Een tweede voorlopige versie van sealed ('verzegelde') klassen en interfaces is voorgesteld, die niet kunnen worden gebruikt door andere klassen en interfaces voor overerving, uitbreiding of het overschrijven van implementaties. Verzegelde klassen bieden ook een meer declaratieve manier om het gebruik van een superklasse te beperken dan toegangsmodifiers, die gebaseerd zijn op een expliciete opsomming van subklassen die voor uitbreiding zijn toegestaan. package com.example.geometry; public sealed class Shape permits com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.simple.Square {…}

Bron: opennet.ru

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers šŸ”„ Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster