logo

Java 8-functies

Oracle heeft op 18 maart 2014 een nieuwe versie van Java uitgebracht als Java 8. Het was een revolutionaire release van het Java voor softwareontwikkelingsplatform. Het omvat verschillende upgrades van de Java-programmering, JVM, Tools en bibliotheken.

Verbeteringen in de programmeertaal Java 8

Java 8 biedt de volgende functies voor Java-programmering:

  • Lambda-uitdrukkingen,
  • Methode referenties,
  • Functionele interfaces,
  • Stream-API,
  • Standaardmethoden,
  • Base64 Coderen Decoderen,
  • Statische methoden in interface,
  • Optionele klasse,
  • Verzamelaars klasse,
  • ForEach() methode,
  • Rhino JavaScript-engine,
  • Parallelle array-sortering,
  • Annotaties typen en herhalen,
  • IO-verbeteringen,
  • Verbeteringen van gelijktijdigheid,
  • JDBC-verbeteringen enz.

Lambda-uitdrukkingen

Lambda-expressie helpt ons onze code in functionele stijl te schrijven. Het biedt een duidelijke en beknopte manier om de SAM-interface (Single Abstract Method) te implementeren door een expressie te gebruiken. Het is erg handig in de collectiebibliotheek waarin het helpt bij het itereren, filteren en extraheren van gegevens.

Voor meer informatie en voorbeelden: Klik hier


Methodereferenties

Java 8 Methodereferentie wordt gebruikt om naar de methode van de functionele interface te verwijzen. Het is een compacte en gemakkelijke vorm van lambda-expressie. Elke keer dat u de lambda-expressie gebruikt om alleen maar naar een methode te verwijzen, kunt u uw lambda-expressie vervangen door een methodereferentie.

Voor meer informatie en voorbeelden: Klik hier


Functionele interface

Een interface die slechts één abstracte methode bevat, staat bekend als functionele interface. Het kan een willekeurig aantal standaard- en statische methoden hebben. Het kan ook methoden van objectklasse declareren.

Functionele interfaces worden ook wel Single Abstract Method Interfaces (SAM Interfaces) genoemd.

Voor meer informatie en voorbeelden: Klik hier


Optioneel

Java heeft een nieuwe klasse Optioneel geïntroduceerd in Java 8. Het is een openbare laatste klasse die wordt gebruikt om met NullPointerException in Java-applicaties om te gaan. Wij moeten importeren java.util pakket om deze klasse te gebruiken. Het biedt methoden om de aanwezigheid van waarde voor een bepaalde variabele te controleren.

Voor meer informatie en voorbeelden: Klik hier


voorElk

Java biedt een nieuwe methode forEach() om de elementen te herhalen. Het wordt gedefinieerd in Iterable- en Stream-interfaces.

Het is een standaardmethode die is gedefinieerd in de iterabele interface. Collectieklassen die de Iterable-interface uitbreiden, kunnen de methode forEach() gebruiken om elementen te itereren.

Deze methode gebruikt één enkele parameter die een functionele interface is. U kunt dus de lambda-expressie als argument doorgeven.

Voor meer informatie en voorbeelden: Klik hier


Datum/tijd-API

Java heeft sinds Java 8 een nieuwe Datum- en Tijd-API geïntroduceerd. Het java.time-pakket bevat Java 8 Datum- en Tijdklassen.

Voor meer informatie en voorbeelden: Klik hier


Standaardmethoden

Java biedt de mogelijkheid om standaardmethoden binnen de interface te creëren. Methoden die in de interface zijn gedefinieerd en zijn getagd met het standaardsleutelwoord staan ​​bekend als standaardmethoden. Deze methoden zijn niet-abstracte methoden en kunnen een methodebody hebben.

Voor meer informatie en voorbeelden: klik hier


Rhino JavaScript-engine

Nashorn is een JavaScript-engine. Het wordt gebruikt om JavaScript-code dynamisch uit te voeren op JVM (Java Virtual Machine). Java biedt een opdrachtregelprogramma enz die wordt gebruikt om JavaScript-code uit te voeren.

U kunt JavaScript-code op twee manieren uitvoeren:

  1. Met behulp van het opdrachtregelprogramma jjs, en
  2. Door te embedden in de Java-broncode.

Voor meer informatie en voorbeelden: klik hier


StringJoiner

Java heeft een nieuwe laatste klasse StringJoiner toegevoegd in het java.util-pakket. Het wordt gebruikt om een ​​reeks tekens te construeren, gescheiden door een scheidingsteken. Nu kunt u een tekenreeks maken door scheidingstekens zoals komma(,), koppelteken(-) enz. door te geven.

wat is het easter egg van Android

Voor meer informatie en voorbeelden: klik hier


Verzamelaars

Collectors is een laatste klasse die de Object-klasse uitbreidt. Het biedt reductiebewerkingen, zoals het verzamelen van elementen in collecties, het samenvatten van elementen volgens verschillende criteria, enz.

Voor meer informatie en voorbeelden: Klik hier


Stream-API

Het Java 8 java.util.stream-pakket bestaat uit klassen, interfaces en een enum om functionele bewerkingen op de elementen mogelijk te maken. Het voert luie berekeningen uit. Het wordt dus alleen uitgevoerd als het nodig is.

Voor meer informatie en voorbeelden: Klik hier


Streamfilter

Java-stream biedt een methode filter() om stream-elementen te filteren op basis van een bepaald predikaat. Stel dat u alleen even elementen van uw lijst wilt hebben, dan kunt u dit eenvoudig doen met behulp van de filter() methode.

Deze methode neemt het predikaat als argument en retourneert een stroom resulterende elementen.

Voor meer informatie en voorbeelden: Klik hier


Java Base64-codering en decodering

Java biedt een klasse Base64 om met encryptie en decryptie om te gaan. U moet de klasse java.util.Base64 in uw bronbestand importeren om de methoden ervan te kunnen gebruiken.

Deze klasse biedt drie verschillende encoders en decoders om informatie op elk niveau te coderen.

Voor meer informatie en voorbeelden: Klik hier


Java-parallelle array-sortering

Java biedt een nieuwe extra functie in de klasse Arrays die wordt gebruikt om array-elementen parallel te sorteren. De methode parallelSort() is toegevoegd aan de klasse java.util.Arrays, die de gemeenschappelijke pool JSR 166 Fork/Join parallellisme gebruikt om sortering van arrays mogelijk te maken. Het is een overbelaste methode.

Voor meer informatie en voorbeelden: klik hier


Java 8-beveiligingsverbeteringen

1) De Java Secure Socket Extension (JSSE)-provider schakelt de protocollen Transport Layer Security (TLS) 1.1 en TLS 1.2 standaard in aan de clientzijde.

2) Er is een verbeterde methode AccessController.doPrivileged toegevoegd waarmee code een subset van zijn privileges kan laten gelden, zonder te voorkomen dat de stapel volledig wordt doorkruist om te controleren op andere machtigingen.

3) Algoritmen voor geavanceerde versleuteling (AES) en wachtwoordgebaseerde versleuteling (PBE), zoals PBEWithSHA256AndAES_128 en PBEWithSHA512AndAES_256 zijn toegevoegd aan de SunJCE-provider.

4) Java Secure Socket Extension (SunJSSE) heeft de Server Name Indication (SNI)-extensie voor clienttoepassingen standaard ingeschakeld in JDK 7 en JDK 8 ondersteunt de SNI-extensie voor servertoepassingen. De SNI-extensie is een functie die de SSL/TLS-protocollen uitbreidt om aan te geven met welke servernaam de client verbinding probeert te maken tijdens handshaking.

5) De SunJSSE is verbeterd ter ondersteuning van Authenticated Encryption with Associated Data (AEAD)-algoritmen. De Java Cryptography Extension (SunJCE)-provider is verbeterd ter ondersteuning van AES/GCM/NoPadding-coderingsimplementatie, evenals Galois/Counter Mode (GCM)-algoritmeparameters.

6) Er is een nieuwe opdrachtvlag -importpassword toegevoegd aan het keytool-hulpprogramma. Het wordt gebruikt om een ​​wachtwoord te accepteren en veilig op te slaan als een geheime sleutel. Klassen zoals java.security.DomainLoadStoreParameter enjava.security.PKCS12Attribute zijn toegevoegd om het DKS-sleutelarchieftype te ondersteunen.

7) In JDK 8 zijn de cryptografische algoritmen verbeterd met de SHA-224-variant van de SHA-2-familie van message-digest-implementaties.

8) Verbeterde ondersteuning voor NSA Suite B-cryptografie, waaronder:

  • OID-registratie voor NSA Suite B-cryptografie-algoritmen
  • Ondersteuning voor het genereren van 2048-bit DSA-sleutelparen en aanvullende handtekeningalgoritmen voor 2048-bit DSA-sleutels zoals SHA224withDSA en SHA256withDSA.
  • Opheffing van de sleutelgroottebeperking van 1024 naar 2048 voor het Diffie-Hellman (DH)-algoritme.

9) De SecureRandom-klasse biedt de generatie van cryptografisch sterke willekeurige getallen die worden gebruikt voor privé- of openbare sleutels, cijfers en ondertekende berichten. De methode getInstanceStrong() werd geïntroduceerd in JDK 8, die een instantie van de sterkste SecureRandom retourneert. Het moet worden gebruikt wanneer u een privé- en openbare RSA-sleutel moet maken. SecureRandom bevat de volgende andere wijzigingen:

  • Er zijn twee nieuwe implementaties geïntroduceerd voor UNIX-platforms, die blokkerend en niet-blokkerend gedrag bieden.

10) Er is een nieuwe klasse PKIXRevocationChecker opgenomen die de intrekkingsstatus van certificaten controleert met het PKIX-algoritme. Het ondersteunt best effort-controle, controle van eindentiteitscertificaten en mechanismespecifieke opties.

11) De Public Key Cryptography Standards 11 (PKCS) is uitgebreid met 64-bits ondersteuning voor Windows.

12) Er zijn twee nieuwe rcache-typen toegevoegd aan Kerberos 5. Type none betekent helemaal geen rcache, en type dfl betekent de op bestanden gebaseerde rcache in DFL-stijl. Ook wordt de door de acceptor aangevraagde subsleutel nu ondersteund. Ze worden geconfigureerd met behulp van de systeemeigenschappen sun.security.krb5.rcache en sun.security.krb5.acceptor.subkey.

13) In JDK 8 worden Kerberos 5-protocolovergang en beperkte delegatie ondersteund binnen hetzelfde domein.

14) Java 8 heeft zwakke encryptie standaard uitgeschakeld. De DES-gerelateerde Kerberos 5-coderingstypen worden standaard niet ondersteund. Deze coderingstypen kunnen worden ingeschakeld door allow_weak_crypto=true toe te voegen aan het krb5.conf-bestand.

15) U kunt de servernaam instellen op nul om een ​​niet-gebonden server aan te duiden. Dit betekent dat een client de service kan aanvragen met elke servernaam. Nadat een context tot stand is gebracht, kan de server de naam ophalen als een onderhandelde eigenschap met de sleutelnaam SASL.BOUND_SERVER_NAME.

16) Java Native Interface (JNI)-bridge naar native Java Generic Security Service (JGSS) wordt nu ondersteund op Mac OS X. U kunt de systeemeigenschap sun.security.jgss.native instellen op true om deze in te schakelen.

17) Een nieuwe systeemeigenschap, jdk.tls.ephemeralDHKeySize, is gedefinieerd om de kortstondige DH-sleutelgroottes aan te passen. De minimaal acceptabele DH-sleutelgrootte is 1024 bits, behalve voor exporteerbare coderingssuites of de verouderde modus (jdk.tls.ephemeralDHKeySize=legacy).

18) De Java Secure Socket Extension (JSSE)-provider respecteert standaard de cipher suite-voorkeur van de klant. Het gedrag kan echter worden gewijzigd om de voorkeur van de coderingssuite van de server te respecteren door SSLParameters.setUseCipherSuitesOrder(true) via de server aan te roepen.


Verbeteringen in Java 8 Tools

1) Er wordt een jjs-opdracht geïntroduceerd, die de Nashorn-engine aanroept, hetzij in de interactieve shell-modus, hetzij om scriptbestanden te interpreteren.

2) De Java-opdracht kan JavaFX-applicaties starten, op voorwaarde dat de JavaFX-applicatie correct is verpakt.

3) De manpagina van het Java-commando (zowel nroff als HTML) is volledig herwerkt. De geavanceerde opties zijn nu onderverdeeld in Runtime, Compiler, Garbage Collection en Serviceability, afhankelijk van het gebied waarop ze betrekking hebben. Verschillende voorheen ontbrekende opties worden nu beschreven. Er is ook een sectie voor opties die sinds de vorige release verouderd of verwijderd zijn.

4) Met het nieuwe jdeps-opdrachtregelprogramma kan de ontwikkelaar klassebestanden analyseren om afhankelijkheden op pakket- of klasseniveau te bepalen.

5) U hebt op afstand toegang tot diagnostische opdrachten, die voorheen alleen lokaal toegankelijk waren via de jcmd-tool. Toegang op afstand wordt geboden met behulp van de Java Management Extensions (JMX), zodat diagnostische opdrachten worden weergegeven op een MBean-platform dat is geregistreerd bij de MBean-server van het platform. De MBean is de com.sun.management.DiagnosticCommandMBean-interface.

6) Een nieuwe optie -tsapolicyid is opgenomen in de jarsigner-tool waarmee u een ondertekende tijdstempel kunt aanvragen bij een tijdstempelautoriteit en deze aan een ondertekend JAR-bestand kunt koppelen.

7) Er is een nieuwe methode java.lang.reflect.Executable.getParameters opgenomen waarmee u toegang krijgt tot de namen van de formele parameters van elke methode of constructor. .class-bestanden slaan echter standaard geen formele parameternamen op. Om formele parameternamen in een bepaald .class-bestand op te slaan, en zo de Reflection API in staat te stellen formele parameternamen op te halen, compileert u het bronbestand met de optie -parameters van de javac-compiler.

8) De typeregels voor binaire vergelijkingen in de Java Language Specification (JLS) Section 15.21 worden nu correct afgedwongen door javac.

9) In deze release zijn de apt-tool en de bijbehorende API in het pakket com.sun.mirror verwijderd.

Javadoc-verbeteringen

In Java SE 8 zijn de volgende nieuwe API's toegevoegd aan de Javadoc-tool.

  • Een nieuwe DocTree API introduceert een scanner waarmee u de broncode kunt doorkruisen die wordt weergegeven door een abstracte syntaxisboom. Dit breidt de Compiler Tree API uit om gestructureerde toegang te bieden tot de inhoud van Javadoc-opmerkingen.
  • Het pakket javax.tools bevat klassen en interfaces waarmee u de Javadoc-tool rechtstreeks vanuit een Java-toepassing kunt oproepen, zonder een nieuw proces uit te voeren.
  • Het gedeelte 'Methodesamenvatting' van de gegenereerde documentatie van een klasse of interface is geherstructureerd. De methodebeschrijvingen in deze sectie zijn gegroepeerd op type. Standaard worden alle methoden vermeld. U kunt op een tabblad klikken om methoden van een bepaald type weer te geven (statisch, instance, abstract, concreet of verouderd, als ze in de klasse of interface bestaan).
  • De javadoc-tool biedt nu ondersteuning voor het controleren van de inhoud van javadoc-opmerkingen op problemen die tot verschillende problemen kunnen leiden, zoals ongeldige HTML of toegankelijkheidsproblemen, in de bestanden die door javadoc worden gegenereerd. De functie is standaard ingeschakeld en kan ook worden beheerd door de nieuwe optie -Xdoclint.

Pack200-verbeteringen

Het bestandsformaat van de Java-klasse is bijgewerkt vanwege JSR 292, dat dynamisch getypte talen op het Java-platform ondersteunt.

De Pack200-engine is bijgewerkt om ervoor te zorgen dat Java SE 8-klassebestanden effectief worden gecomprimeerd. Nu kan het constante poolgegevens en nieuwe bytecodes herkennen die door JSR 292 zijn geïntroduceerd. Als gevolg hiervan zullen gecomprimeerde bestanden die met deze versie van de pack200-tool zijn gemaakt, niet compatibel zijn met oudere versies van de unpack200-tool.


Java 8 I/O-verbeteringen

In Java 8 zijn er verschillende verbeteringen aan de java.nio.charset.Charset en uitgebreide charset-implementaties. Het omvat het volgende:

  • Een nieuwe SelectorProvider die de prestaties of schaalbaarheid van de server kan verbeteren. De /dev/poll SelectorProvider blijft de standaard. Om het Solaris-gebeurtenispoortmechanisme te gebruiken, voert u het uit met de systeemeigenschap java.nio.channels.spi.Selector ingesteld op de waarde sun.nio.ch.EventPortSelectorProvider.
  • De grootte van het bestand /jre/lib/charsets.jar is verkleind.
  • De prestaties zijn verbeterd voor de constructor java.lang.String(byte[], ∗) en de methode java.lang.String.getBytes().

Java 8 netwerkverbeteringen

1) Een nieuwe klasse java.net.URLPermission is toegevoegd. Het vertegenwoordigt een toestemming voor toegang tot een bron die is gedefinieerd door een bepaalde URL.

2) Er is een pakket jdk.net toegevoegd dat platformspecifieke socketopties bevat en een mechanisme om deze opties in te stellen op alle standaard sockettypen. De socketopties worden gedefinieerd in jdk.net.ExtendedSocketOptions.

3) Als in de klasse HttpURLConnection een beveiligingsmanager is geïnstalleerd en als een methode wordt aangeroepen die resulteert in een poging om een ​​verbinding te openen, moet de beller beschikken over een 'connect'SocketPermission voor de host/poort-combinatie van de bestemmings-URL, of een URLPermission die dit verzoek toestaat.

Als automatische omleiding is ingeschakeld en dit verzoek wordt omgeleid naar een andere bestemming, moet de beller ook toestemming hebben om verbinding te maken met de omgeleide host/URL.


Java 8 gelijktijdigheidsverbeteringen

Het java.util.concurrent-pakket heeft twee nieuwe interfaces en vier nieuwe klassen toegevoegd.

Java.util.concurrent-interfaces

Koppel Beschrijving
openbare statische interface CompletableFuture.AsynchronousCompletionTask Het is een markerinterface die wordt gebruikt om asynchrone taken te identificeren die zijn geproduceerd door asynchrone methoden. Het kan handig zijn voor het monitoren, debuggen en volgen van asynchrone activiteiten.
openbare interface CompletionStage Het creëert een fase van een mogelijk asynchrone berekening, die een actie uitvoert of een waarde berekent wanneer een andere CompletionStage is voltooid.

Java.util.concurrent-klassen

Klas Beschrijving
public class CompletableFuture breidt Object implementeert Future, CompletionStage uit Het is een toekomst die expliciet kan worden voltooid en kan worden gebruikt als een voltooiingsfase, ter ondersteuning van afhankelijke functies en acties die worden geactiveerd na voltooiing ervan.
openbare statische klasse ConcurrentHashMap.KeySetView breidt Object-implementaties Set uit, Serialiseerbaar Het is een weergave van een ConcurrentHashMap als een set sleutels, waarin toevoegingen optioneel kunnen worden ingeschakeld door toewijzing aan een gemeenschappelijke waarde.
openbare abstracte klasse CountedCompleter breidt ForkJoinTask uit Een ForkJoinTask met een voltooiingsactie die wordt uitgevoerd wanneer deze wordt geactiveerd en er zijn geen resterende lopende acties.
public class CompletionException breidt RuntimeException uit Er wordt een uitzondering gegenereerd wanneer er een fout of andere uitzondering wordt aangetroffen tijdens het voltooien van een resultaat of taak.

Nieuwe methoden in de klasse java.util.concurrent.ConcurrentHashMap

De ConcurrentHashMap-klasse introduceert verschillende nieuwe methoden in de nieuwste release. Het omvat verschillende forEach-methoden (forEach, forEachKey, forEachValue en forEachEntry), zoekmethoden (search, searchKeys, searchValues ​​en searchEntries) en een groot aantal reductiemethoden (reduce, reduceToDouble, reduceToLong etc.). Andere diverse methoden (mappingCount en newKeySet) zijn ook toegevoegd.

Nieuwe klassen in java.util.concurrent.atomic

De nieuwste release introduceert schaalbare, bijwerkbare, variabele ondersteuning via een kleine set nieuwe klassen DoubleAccumulator, DoubleAdder, LongAccumulator en LongAdder. Het maakt intern gebruik van technieken voor het verminderen van conflicten die enorme doorvoerverbeteringen opleveren in vergelijking met Atomic-variabelen.

Klas Beschrijving
public class DoubleAccumulator breidt Number-implementaties Serializable uit Het wordt gebruikt voor een of meer variabelen die samen een lopende dubbele waarde onderhouden, bijgewerkt met behulp van een meegeleverde functie.
public class DoubleAdder breidt Number-implementaties Serializable uit Het wordt gebruikt voor een of meer variabelen die samen een dubbele som van aanvankelijk nul behouden.
public class LongAccumulator breidt Number-implementaties uit Serializable Het wordt gebruikt voor een of meer variabelen die samen een lopende lange waarde onderhouden, bijgewerkt met behulp van een meegeleverde functie.
public class LongAdder breidt Number-implementaties Serializable uit Het wordt gebruikt voor een of meer variabelen die samen een aanvankelijk nul lange som behouden.

Nieuwe methoden in de klasse java.util.concurrent.ForkJoinPool

Deze klasse heeft twee nieuwe methoden getCommonPoolParallelism() en commonPool() toegevoegd, die respectievelijk het beoogde parallellismeniveau van de gemeenschappelijke pool of de gemeenschappelijke poolinstantie retourneren.

Methode Beschrijving
openbare statische ForkJoinPool commonPool() Het retourneert de gemeenschappelijke poolinstantie.
Openbare statische int getCommonPoolParallelism() Het retourneert het beoogde parallelliteitsniveau van de gemeenschappelijke pool.

Nieuwe klasse java.util.concurrent.locks.StampedLock

Er is een nieuwe klasse StampedLock toegevoegd die wordt gebruikt om op mogelijkheden gebaseerde vergrendeling toe te voegen met drie modi voor het controleren van lees-/schrijftoegang (schrijven, lezen en optimistisch lezen). Deze klasse ondersteunt ook methoden die voorwaardelijk conversies bieden in de drie modi.

powershell versus bash
Klas Beschrijving
public class StampedLock breidt Object-implementaties Serializable uit Deze klasse vertegenwoordigt een op mogelijkheden gebaseerde vergrendeling met drie modi voor het regelen van lees-/schrijftoegang.

Java API voor XML-verwerking (JAXP) 1.6 Verbeteringen

In Java 8 is Java API toegevoegd voor XML Processing (JAXP) 1.6. Het vereist het gebruik van de serviceprovider-laderfaciliteit die is gedefinieerd door java.util.ServiceLoader om services uit serviceconfiguratiebestanden te laden.

De reden hiervoor is om toekomstige modularisering van het Java SE-platform mogelijk te maken, waarbij serviceproviders kunnen worden ingezet op andere manieren dan JAR-bestanden en misschien zonder de serviceconfiguratiebestanden.


Verbeteringen van Java Virtual Machine

De verificatie van invokespecial-instructies is aangescherpt, zodat alleen een instantie-initialisatiemethode in de huidige klasse of de directe superklasse ervan kan worden aangeroepen.


Java Mission Control 5.3 is opgenomen in Java 8

Java Mission Control (JMC) is een geavanceerde set tools die efficiënte en gedetailleerde data-analyse mogelijk maakt en geavanceerde, onopvallende Java-monitoring en -beheer levert. JMC biedt secties voor algemene analysegebieden, zoals codeprestaties, geheugen en latentie.

Babel-taalpakketten in het Japans en Vereenvoudigd Chinees zijn nu standaard opgenomen in de Java Mission Control die is opgenomen in JDK 8.


Java 8 Internationaliseringsverbeteringen

1) Unicode-verbeteringen

De JDK 8 biedt ondersteuning voor Unicode 6.2.0. Het bevat de volgende kenmerken.

  • 733 nieuwe karakters, waaronder het teken van de Turkse Lira.
  • 7 nieuwe scripts:
    • Meroïtische hiërogliefen
    • Meroïtisch cursief
    • Sora Sompeng
    • Chakma
    • Sharada
    • Takri
    • Miao
  • 11 nieuwe blokken: inclusief 7 blokken voor de nieuwe scripts hierboven vermeld en 4 blokken voor de volgende bestaande scripts:
  • Arabisch Uitgebreid-A
  • Soendanees supplement
  • Meeting Meek-extensies
  • Arabische wiskundige alfabetische symbolen

Overname van Unicode CLDR-gegevens en de systeemeigenschap java.locale.providers

Het Unicode Consortium heeft het Common Locale Data Repository (CLDR)-project gelanceerd om 'de talen van de wereld te ondersteunen, met de grootste en meest uitgebreide standaardopslagplaats van beschikbare lokale gegevens.' De CLDR wordt de de facto standaard voor lokale gegevens. De op XML gebaseerde landinstellingsgegevens van de CLDR zijn opgenomen in de JDK 8-release, maar zijn standaard uitgeschakeld.

Er zijn vier verschillende bronnen voor landinstellingengegevens:

  • CLDR vertegenwoordigt de landinstellingsgegevens die worden geleverd door het Unicode CLDR-project.
  • HOST vertegenwoordigt de aanpassing door de huidige gebruiker van de instellingen van het onderliggende besturingssysteem. Het werkt alleen met de standaardlandinstelling van de gebruiker en de aanpasbare instellingen kunnen variëren afhankelijk van het besturingssysteem, maar voornamelijk worden de notaties Datum, Tijd, Getal en Valuta ondersteund.
  • SPI vertegenwoordigt de locatiegevoelige services die zijn geïmplementeerd in de geïnstalleerde SPI-providers.
  • JRE vertegenwoordigt de landinstellingen die compatibel zijn met de eerdere JRE-releases.

Om de gewenste landinstellingsgegevensbron te selecteren, gebruikt u de systeemeigenschap java.locale.providers. een lijst van de gegevensbronnen in de gewenste volgorde. Bijvoorbeeld: java.locale.providers=HOST,SPI,CLDR,JRE Het standaardgedrag is gelijk aan de volgende instelling: java.locale.providers=JRE,SPI


Java 8 Nieuwe agenda- en landinstellingen-API's

De JDK 8 bevat twee nieuwe klassen, verschillende nieuwe methoden en een nieuwe retourwaarde voor een bestaande statische methode.

Er zijn twee nieuwe abstracte klassen voor serviceproviders toegevoegd aan het java.util.spi-pakket.

Klas Beschrijving
public abstract class CalendarDataProvider breidt LocaleServiceProvider uit Het is een abstracte klasse voor serviceproviders die landafhankelijke kalenderparameters bieden.
public abstract class CalendarNameProvider breidt LocaleServiceProvider uit Het is een abstracte klasse voor serviceproviders die gelokaliseerde tekenreeksrepresentaties (weergavenamen) van agendaveldwaarden bieden.

Een statische methode kan nu Locale.UNICODE_LOCALE_EXTENSION voor het nummeringssysteem herkennen.

Methode Beschrijving
public static final DecimalFormatSymbols getInstance(Locale locale) Het wordt gebruikt om de DecimalFormatSymbols-instantie voor de opgegeven landinstelling op te halen. Deze methode biedt toegang tot DecimalFormatSymbols-instanties voor landinstellingen die worden ondersteund door de Java-runtime zelf, maar ook voor de landinstellingen die worden ondersteund door geïnstalleerde DecimalFormatSymbolsProvider-implementaties. Er wordt NullPointerException gegenereerd als de landinstelling nul is.

Nieuwe methoden toegevoegd in de kalender-API:

Methode Beschrijving
public boolean isSupportedLocale(landelijke landinstelling) Het retourneert waar als de opgegeven landinstelling wordt ondersteund door deze landinstellingsserviceprovider. De opgegeven landinstelling kan extensies bevatten waarmee rekening moet worden gehouden bij het bepalen van de ondersteuning. Het wordt gedefinieerd in de klasse java.util.spi.LocaleServiceProvider
openbare tekenreeks getCalendarType() Het retourneert het kalendertype van deze kalender. Kalendertypen worden gedefinieerd door de Unicode Locale Data Markup Language (LDML)-specificatie. Het wordt gedefinieerd in de klasse java.util.Calendar.

Er zijn nieuwe stijlspecificaties toegevoegd voor de methoden Calendar.getDisplayName en Calendar.getDisplayNames om de notatie van de agendanaam te bepalen.


Specificator Beschrijving
openbare statische finale int SHORT_FORMAT Het is een stijlspecificatie voor getDisplayName en getDisplayNames, die een korte naam aangeeft die voor de indeling wordt gebruikt.
openbare statische finale int LONG_FORMAT Het is een stijlspecificatie voor getDisplayName en getDisplayNames, die een lange naam aangeeft die voor de indeling wordt gebruikt.
openbare statische finale int SHORT_STANDALONE Het is een stijlspecificatie voor getDisplayName en getDisplayNames, die een korte naam aangeeft die onafhankelijk van elkaar wordt gebruikt, zoals een maandafkorting als kalenderkoptekst.
openbare statische finale int LONG_STANDALONE Het is een stijlspecificatie voor getDisplayName en getDisplayNames, die een lange naam aangeeft die onafhankelijk van elkaar wordt gebruikt, zoals de naam van een maand als agendakoppen.

Twee nieuwe Locale-methoden voor het omgaan met de (optionele) extensies van een locale.

Methode Beschrijving
openbare booleaanse hasExtensions() Het retourneert waar als deze landinstelling extensies heeft.
openbare landinstelling stripExtensions() Het retourneert een kopie van deze landinstelling zonder extensies. Als deze landinstelling geen extensies heeft, wordt deze landinstelling zelf geretourneerd.

Twee nieuwe Locale.filter-methoden retourneren een lijst met Locale-instanties die voldoen aan de opgegeven criteria, zoals gedefinieerd in RFC 4647:

Methode Beschrijving
openbaar statisch lijstfilter (LijstprioriteitLijst, Landinstellingen van verzameling) Het retourneert een lijst met overeenkomende Locale-instanties met behulp van het filtermechanisme dat is gedefinieerd in RFC 4647. Dit is gelijk aan filter(List, Collection, FilteringMode) wanneer de modus Locale.FilteringMode.AUTOSELECT_FILTERING is.
openbaar statisch lijstfilter (lijstprioriteitlijst, landinstellingen van verzameling, modus Locale.FilteringMode) Het retourneert een lijst met overeenkomende Locale-instanties met behulp van het filtermechanisme dat is gedefinieerd in RFC 4647.

Twee nieuwe Locale.filterTags-methoden retourneren een lijst met taaltags die voldoen aan de opgegeven criteria, zoals gedefinieerd in RFC 4647.

Methode Beschrijving
openbare statische lijstfilterTags (LijstprioriteitLijst, Verzamelingstags) Het retourneert een lijst met tags voor overeenkomende talen met behulp van het basisfiltermechanisme dat is gedefinieerd in RFC 4647. Dit is gelijk aan filterTags(List, Collection, FilteringMode) wanneer de modus Locale.FilteringMode.AUTOSELECT_FILTERING is.
openbare statische lijstfilterTags (lijstprioriteitlijst, verzamelingstags, Locale.FilteringMode-modus) Het retourneert een lijst met tags voor overeenkomende talen met behulp van het basisfiltermechanisme dat is gedefinieerd in RFC 4647.

Twee nieuwe opzoekmethoden retourneren de best overeenkomende landinstelling of taaltag met behulp van het opzoekmechanisme dat is gedefinieerd in RFC 4647.

Methode Beschrijving
openbare statische locale opzoeken (LijstprioriteitLijst, Landinstellingen van verzameling) Het retourneert een Locale-instantie voor de best overeenkomende taaltag met behulp van het opzoekmechanisme dat is gedefinieerd in RFC 4647.
Openbare statische string lookupTag (LijstprioriteitLijst, Verzamelingstags) Het retourneert de best overeenkomende taaltag met behulp van het opzoekmechanisme dat is gedefinieerd in RFC 4647.

Andere Java 8-versieverbeteringen

Verbeteringen in JDK 8u5

1) De frequentie waarmee de beveiligingsvragen voor een applicatie worden weergegeven, is verlaagd.

voorbeeld van alpha-bèta-snoeien

Verbeteringen in JDK 8u11

1) Een optie om aanbiedingen van sponsors te onderdrukken wanneer de JRE is geïnstalleerd of bijgewerkt, is beschikbaar op het tabblad Geavanceerd van het Java-configuratiescherm.

2) Het Entry-Point-attribuut kan worden opgenomen in het JAR-bestandsmanifest om een ​​of meer klassen te identificeren als geldig toegangspunt voor uw RIA (Rich Internet-toepassing).


Verbeteringen in JDK 8u20

1) De javafxpackager-tool is hernoemd naar javapackager. Deze tool is uitgebreid met nieuwe argumenten voor op zichzelf staande applicatiebundelaars.

De volgende verbeteringen hebben betrekking op de Java-tool:

  • Er is een experimentele JIT-compileroptie toegevoegd met betrekking tot Restricted Transactional Memory (RTM).
  • Er zijn verschillende opties toegevoegd met betrekking tot string-deduplicatie.
  • Er zijn verschillende opties toegevoegd met betrekking tot de intrinsieke Advanced Encryption Standard (AES).
  • Combinaties van opties voor afvalinzameling zijn verouderd.

2) Garbage Collection Tuning Guide is toegevoegd aan de Java HotSpot Virtual Machine. Het beschrijft de garbage collectors die bij de Java HotSpot VM worden geleverd en helpt u beslissen welke garbage collector de prestaties van uw applicatie het beste kan optimaliseren, vooral als deze grote hoeveelheden gegevens verwerkt (meerdere gigabytes), veel threads heeft en hoge transactiesnelheden heeft. .


Verbeteringen in JDK 8u31

1) In deze release is het SSLv3-protocol verwijderd uit de geavanceerde opties van het Java-configuratiescherm.


Verbeteringen in JDK 8u40

Java-tool

1) De -XX:+CheckEndorsedAndExtDirs is toegevoegd omdat het mechanisme voor het overschrijven van goedgekeurde standaarden (JDK-8065675) en het uitbreidingsmechanisme (JDK-8065702) zijn verouderd. De optie helpt bij het identificeren van bestaand gebruik van deze mechanismen en wordt ondersteund in JDK 7u80 en JDK 8u40.

2) Java Flight Recorder (JFR) biedt verschillende manieren om commerciële functies te ontgrendelen en JFR in te schakelen tijdens de runtime van een applicatie.

Het bevat Java-opdrachtregelopties zoals jcmd-diagnoseopdrachten en grafische gebruikersinterface (GUI)-besturingselementen binnen Java Mission Control. Dankzij deze flexibiliteit kunt u bij het opstarten de juiste opties bieden of later met JFR communiceren.

3) De optie -XX:StartFlightRecording=parameter=waarde heeft een nieuwe parameter, dumponexit=true, die specificeert of een dumpbestand met JFR-gegevens moet worden gegenereerd wanneer de JVM op een gecontroleerde manier wordt beëindigd.

4) De opties met betrekking tot Restricted Transactional Memory (RTM) zijn niet langer experimenteel. Deze opties omvatten -XX:RTMAbortRatio=abort_ratio, -XX:RTMRetryCount=number_of_retrys, -XX:+UseRTMDeopt en -XX:+UseRTMLocking.

5) In Java 8 is Application Class Data Sharing (AppCDS) geïntroduceerd. AppCDS breidt CDS (Class Data Sharing) uit om het mogelijk te maken dat klassen uit de standaardextensiemappen en het pad van de applicatieklasse in het gedeelde archief worden geplaatst. Dit is een commerciële functie en wordt niet langer als experimenteel beschouwd.

6) Nieuwe opties -XX:+ResourceManagement en -XX:ResourceManagementSampleInterval=waarde zijn toegevoegd.

7) Er is aanvullende informatie over grote pagina's toegevoegd. Grote pagina's, ook wel enorme pagina's genoemd, zijn geheugenpagina's die aanzienlijk groter zijn dan de standaard geheugenpaginagrootte. Grote pagina's optimaliseren de vertalingsbuffers van de processor. De Linux-opties -XX:+UseHugeTLBFS, -XX:+UseSHM en -XX:+UseTransparentHugePages zijn gedocumenteerd.

8) De optie -XX:ObjectAlignmentInBytes=uitlijning is gedocumenteerd.

JJS-tool

1) De optie --optimistic-types=[true|false] is toegevoegd. Het schakelt optimistische typeaannames in of uit met deoptimaliserende hercompilatie.

2) De optie --taal=[es5] is toegevoegd aan de jjs-tool. Het specificeert de ECMAScript-taalversie.

Javapackager-tool

1) Er zijn nieuwe argumenten beschikbaar voor OS X-bundelaars. Het argument mac.CFBundleVersion identificeert het interne versienummer dat moet worden gebruikt.

2) Het argument mac.dmg.simple geeft aan of DMG-aanpassingsstappen die afhankelijk zijn van het uitvoeren van AppleScript-code worden overgeslagen.

Jcmd-tool

De Jcmd-tool wordt gebruikt voor dynamische interactie met Java Flight Recorder (JFR). U kunt het gebruiken om commerciële functies te ontgrendelen, vluchtopnamen in te schakelen/starten/stoppen en verschillende statusberichten van het systeem te verkrijgen.

Jstat-tool

De jstat-tool is bijgewerkt met informatie over gecomprimeerde klassenruimte, een speciaal onderdeel van metaruimte.

Virtuele machine

De Scalable Native Memory Tracking HotSpot VM-functie helpt bij het diagnosticeren van VM-geheugenlekken en verduidelijkt gebruikers wanneer er geen geheugenlekken in de VM voorkomen. Native Memory Tracker kan worden uitgevoerd zonder zelfuitschakeling op grote systemen en zonder een significante prestatie-impact te veroorzaken die verder gaat dan wat voor kleine programma's acceptabel wordt geacht.