logo

Характеристики на Java 8

Oracle пусна нова версия на Java като Java 8 на 18 март 2014 г. Това беше революционно издание на платформата Java за разработка на софтуер. Той включва различни надстройки на програмирането на Java, JVM, инструменти и библиотеки.

Подобрения на езика за програмиране на Java 8

Java 8 предоставя следните функции за програмиране на Java:

  • ламбда изрази,
  • Препратки към методите,
  • Функционални интерфейси,
  • API за поток,
  • Методи по подразбиране,
  • Base64 Encode Decode,
  • Статични методи в интерфейса,
  • Незадължителен клас,
  • Колекционерски клас,
  • ForEach() метод,
  • Rhino JavaScript Engine,
  • Паралелно сортиране на масиви,
  • Тип и повторение на анотации,
  • IO подобрения,
  • Подобрения на паралелността,
  • JDBC подобрения и др.

Ламбда изрази

Ламбда изразът ни помага да напишем нашия код във функционален стил. Той предоставя ясен и кратък начин за прилагане на SAM интерфейс (единичен абстрактен метод) чрез използване на израз. Той е много полезен в колекция библиотека, в която помага за итериране, филтриране и извличане на данни.

За повече информация и примери: Натисни тук


Препратки към метода

Препратката към метод на Java 8 се използва за препратка към метод на функционален интерфейс. Това е компактна и лесна форма на ламбда израз. Всеки път, когато използвате ламбда израз просто за препращане към метод, можете да замените своя ламбда израз с препратка към метод.

За повече информация и примери: Натисни тук


Функционален интерфейс

Интерфейс, който съдържа само един абстрактен метод, е известен като функционален интерфейс. Може да има произволен брой методи по подразбиране и статични. Може също така да декларира методи на обектен клас.

Функционалните интерфейси са известни също като интерфейси с единичен абстрактен метод (SAM интерфейси).

За повече информация и примери: Натисни тук


Не е задължително

Java представи нов клас Optional в Java 8. Това е публичен финален клас, който се използва за справяне с NullPointerException в Java приложение. Трябва да внасяме java.util пакет за използване на този клас. Той предоставя методи за проверка на наличието на стойност за определена променлива.

За повече информация и примери: Натисни тук


за всеки

Java предоставя нов метод forEach() за повторение на елементите. Дефиниран е в интерфейси Iterable и Stream.

Това е метод по подразбиране, дефиниран в интерфейса Iterable. Колекция класове, които разширяват интерфейса Iterable, могат да използват метода forEach() за итериране на елементи.

Този метод приема един параметър, който е функционален интерфейс. Така че можете да подадете ламбда израз като аргумент.

За повече информация и примери: Натисни тук


API за дата/час

Java въведе нов API за дата и час след Java 8. Пакетът java.time съдържа класове за дата и час на Java 8.

За повече информация и примери: Натисни тук


Методи по подразбиране

Java предоставя възможност за създаване на методи по подразбиране в интерфейса. Методи, които са дефинирани в интерфейса и маркирани с ключова дума по подразбиране, са известни като методи по подразбиране. Тези методи са неабстрактни методи и могат да имат тяло на метода.

За повече информация и примери: щракнете тук


Rhino JavaScript Engine

Nashorn е JavaScript двигател. Използва се за динамично изпълнение на JavaScript код в JVM (Java Virtual Machine). Java предоставя инструмент за команден ред и т.н който се използва за изпълнение на JavaScript код.

Можете да изпълните JavaScript код по два начина:

  1. Използване на инструмента за команден ред jjs и
  2. Чрез вграждане в изходния код на Java.

За повече информация и примери: щракнете тук


StringJoiner

Java добави нов финален клас StringJoiner в пакета java.util. Използва се за конструиране на поредица от знаци, разделени с разделител. Сега можете да създадете низ чрез предаване на разделители като запетая(,), тире(-) и т.н.

slf4j срещу log4j

За повече информация и примери: щракнете тук


Колекционери

Collectors е последен клас, който разширява класа Object. Той предоставя операции за намаляване, като натрупване на елементи в колекции, обобщаване на елементи според различни критерии и т.н.

За повече информация и примери: Натисни тук


API за поток

Java 8 java.util.stream пакетът се състои от класове, интерфейси и enum, за да позволи операции във функционален стил върху елементите. Той извършва лениви изчисления. Така че се изпълнява само когато е необходимо.

За повече информация и примери: Натисни тук


Филтър за поток

Потокът на Java предоставя метод filter() за филтриране на елементи на поток въз основа на даден предикат. Да предположим, че искате да получите само четни елементи от вашия списък, можете да направите това лесно с помощта на метода filter().

Този метод приема предикат като аргумент и връща поток от получени елементи.

За повече информация и примери: Натисни тук


Кодиране и декодиране на Java Base64

Java предоставя клас Base64 за справяне с криптиране и декриптиране. Трябва да импортирате клас java.util.Base64 във вашия изходен файл, за да използвате неговите методи.

Този клас предоставя три различни енкодера и декодера за криптиране на информация на всяко ниво.

За повече информация и примери: Натисни тук


Паралелно сортиране на масиви в Java

Java предоставя нова допълнителна функция в класа Arrays, която се използва за паралелно сортиране на елементи от масив. Методът parallelSort() е добавен към класа java.util.Arrays, който използва общия пул за паралелизъм на JSR 166 Fork/Join, за да осигури сортиране на масиви. Това е претоварен метод.

За повече информация и примери: щракнете тук


Java 8 подобрения в сигурността

1) Доставчикът на Java Secure Socket Extension (JSSE) активира протоколите Transport Layer Security (TLS) 1.1 и TLS 1.2 по подразбиране от страна на клиента.

2) Добавен е подобрен метод AccessController.doPrivileged, който позволява на кода да предявява подмножество от своите привилегии, без да предотвратява пълното обхождане на стека за проверка за други разрешения.

3) Разширен стандарт за шифроване (AES) и алгоритми за шифроване, базирано на парола (PBE), като PBEWithSHA256AndAES_128 и PBEWithSHA512AndAES_256, са добавени към доставчика на SunJCE.

4) Java Secure Socket Extension (SunJSSE) активира разширението Server Name Indication (SNI) за клиентски приложения по подразбиране в JDK 7 и JDK 8 поддържа SNI разширението за сървърни приложения. Разширението SNI е функция, която разширява SSL/TLS протоколите, за да посочи с какво име на сървъра клиентът се опитва да се свърже по време на ръкостискане.

5) SunJSSE е подобрен, за да поддържа алгоритми за удостоверено криптиране със свързани данни (AEAD). Доставчикът на Java Cryptography Extension (SunJCE) е подобрен, за да поддържа внедряване на шифър AES/GCM/NoPadding, както и параметри на алгоритъм Galois/Counter Mode (GCM).

6) Към помощната програма keytool се добавя нов команден флаг -importpassword. Използва се за приемане на парола и нейното сигурно съхранение като таен ключ. Класове като java.security.DomainLoadStoreParameter и java.security.PKCS12Attribute се добавят, за да поддържат типа DKS keystore.

7) В JDK 8, криптографските алгоритми са подобрени с варианта SHA-224 на фамилията SHA-2 от имплементации за извличане на съобщения.

8) Подобрена поддръжка за NSA Suite B Cryptography, която включва:

  • OID регистрация за NSA Suite B криптографски алгоритми
  • Поддръжка за 2048-битово генериране на двойки ключове DSA и допълнителни алгоритми за подпис за 2048-битови DSA ключове като SHA224withDSA и SHA256withDSA.
  • Премахване на ограничението за размера на клавиша от 1024 на 2048 за алгоритъма на Дифи-Хелман (DH).

9) Класът SecureRandom осигурява генерирането на криптографски силни произволни числа, които се използват за частни или публични ключове, шифри и подписани съобщения. Методът getInstanceStrong() беше въведен в JDK 8, който връща екземпляр на най-силния SecureRandom. Трябва да се използва, когато трябва да създадете RSA частен и публичен ключ. SecureRandom включва следните други промени:

  • Въведени са две нови реализации за UNIX платформи, които осигуряват блокиращо и неблокиращо поведение.

10) Включен е нов клас PKIXRevocationChecker, който проверява статуса на анулиране на сертификати с алгоритъма PKIX. Той поддържа проверка на най-доброто усилие, проверка на сертификат на крайния обект и специфични за механизма опции.

11) Стандартите за криптография с публичен ключ 11 (PKCS) бяха разширени, за да включват 64-битови поддръжка за Windows.

12) Два нови типа rcache се добавят към Kerberos 5. Type none означава изобщо липса на rcache, а type dfl означава базиран на файл rcache в стил DFL. Освен това заявеният от акцептор подключ вече се поддържа. Те се конфигурират с помощта на системните свойства sun.security.krb5.rcache и sun.security.krb5.acceptor.subkey.

13) В JDK 8 преходът на протокола Kerberos 5 и ограниченото делегиране се поддържат в една и съща област.

14) Java 8 е деактивирала слабото криптиране по подразбиране. Свързаните с DES типове шифроване Kerberos 5 не се поддържат по подразбиране. Тези типове криптиране могат да бъдат активирани чрез добавяне на allow_weak_crypto=true във файла krb5.conf.

15) Можете да зададете име на сървъра на null, за да обозначите несвързан сървър. Това означава, че клиентът може да поиска услугата, използвайки всяко име на сървър. След установяване на контекст сървърът може да извлече името като договорено свойство с името на ключа SASL.BOUND_SERVER_NAME.

16) Мостът на Java Native Interface (JNI) към родната Java Generic Security Service (JGSS) вече се поддържа в Mac OS X. Можете да зададете системното свойство sun.security.jgss.native на true, за да го активирате.

17) Дефинирано е ново системно свойство, jdk.tls.ephemeralDHKeySize, за персонализиране на размерите на краткотрайните DH ключове. Минималният приемлив размер на DH ключ е 1024 бита, с изключение на експортируеми пакети за шифроване или наследен режим (jdk.tls.ephemeralDHKeySize=legacy).

18) Доставчикът на Java Secure Socket Extension (JSSE) зачита предпочитанията на клиентския пакет за шифроване по подразбиране. Поведението обаче може да бъде променено, за да зачита предпочитанията на пакета за шифроване на сървъра чрез извикване на SSLParameters.setUseCipherSuitesOrder(true) през сървъра.


Подобрения на инструментите на Java 8

1) Въвежда се команда jjs, която извиква машината Nashorn или в интерактивен режим на обвивка, или за интерпретиране на скриптови файлове.

2) Командата java може да стартира приложения JavaFX, при условие че приложението JavaFX е пакетирано правилно.

jvm

3) Страницата с ръководство за команди на Java (както nroff, така и HTML) е напълно преработена. Разширените опции вече са разделени на Runtime, Compiler, Garbage Collection и Serviceability, според областта, която засягат. Сега са описани няколко липсващи преди това опции. Има също раздел за опции, които са отхвърлени или премахнати след предишната версия.

4) Нов инструмент за команден ред jdeps позволява на разработчика да анализира файлове на клас, за да определи зависимости на ниво пакет или на ниво клас.

5) Можете да получите дистанционен достъп до диагностични команди, които преди бяха достъпни само локално чрез инструмента jcmd. Отдалеченият достъп се предоставя с помощта на разширенията за управление на Java (JMX), така че диагностичните команди са изложени на платформа MBean, регистрирана на платформата MBean сървър. MBean е интерфейсът com.sun.management.DiagnosticCommandMBean.

6) В инструмента за jarsigner е включена нова опция -tsapolicyid, която ви позволява да поискате подписано времево клеймо от орган за времево клеймо и да го прикачите към подписан JAR файл.

7) Включен е нов метод java.lang.reflect.Executable.getParameters, който ви позволява да получите достъп до имената на формалните параметри на всеки метод или конструктор. Въпреки това, .class файловете не съхраняват официални имена на параметри по подразбиране. За да съхранявате официални имена на параметри в конкретен .class файл и по този начин да разрешите на Reflection API да извлича официални имена на параметри, компилирайте изходния файл с опцията -parameters на компилатора javac.

8) Правилата за типове за двоични сравнения в Java Language Specification (JLS) Раздел 15.21 вече ще се прилагат правилно от javac.

9) В тази версия инструментът apt и свързаният с него API, съдържащи се в пакета com.sun.mirror, са премахнати.

Подобрения на Javadoc

В Java SE 8 следните нови API бяха добавени към инструмента Javadoc.

  • Нов DocTree API въвежда скенер, който ви позволява да обхождате изходния код, който е представен от абстрактно синтактично дърво. Това разширява API на дървото на компилатора, за да осигури структуриран достъп до съдържанието на коментарите на javadoc.
  • Пакетът javax.tools съдържа класове и интерфейси, които ви позволяват да извикате инструмента Javadoc директно от Java приложение, без да изпълнявате нов процес.
  • Разделът „Резюме на метода“ на генерираната документация на клас или интерфейс е преструктуриран. Описанията на методите в този раздел са групирани по тип. По подразбиране всички методи са изброени. Можете да щракнете върху раздел, за да видите методи от конкретен тип (статични, екземплярни, абстрактни, конкретни или остарели, ако съществуват в класа или интерфейса).
  • Инструментът javadoc вече има поддръжка за проверка на съдържанието на коментарите на javadoc за проблеми, които могат да доведат до различни проблеми, като невалиден HTML или проблеми с достъпността, във файловете, генерирани от javadoc. Функцията е активирана по подразбиране и може да се контролира и от новата опция -Xdoclint.

Pack200 Подобрения

Файловият формат на клас Java е актуализиран поради JSR 292, който поддържа динамично въведени езици на платформата Java.

Механизмът Pack200 е актуализиран, за да гарантира, че файловете от клас Java SE 8 се компресират ефективно. Сега той може да разпознава постоянни записи в пула и нови байт кодове, въведени от JSR 292. В резултат на това компресираните файлове, създадени с тази версия на инструмента pack200, няма да бъдат съвместими с по-старите версии на инструмента unpack200.


Java 8 I/O подобрения

В Java 8 има няколко подобрения на реализациите на java.nio.charset.Charset и разширен набор от знаци. Тя включва следното:

  • Нов SelectorProvider, който може да подобри производителността или мащабируемостта на сървъра. /dev/poll SelectorProvider продължава да бъде по подразбиране. За да използвате механизма за порт на събития на Solaris, стартирайте със системното свойство java.nio.channels.spi.Selector, зададено на стойност sun.nio.ch.EventPortSelectorProvider.
  • Размерът на файла /jre/lib/charsets.jar е намален.
  • Производителността е подобрена за конструктора java.lang.String(byte[], ∗) и метода java.lang.String.getBytes().

Java 8 Мрежови подобрения

1) Добавен е нов клас java.net.URLPermission. Той представлява разрешение за достъп до ресурс, дефиниран от даден URL.

2) Добавен е пакет jdk.net, който съдържа специфични за платформата опции за сокет и механизъм за настройка на тези опции за всички стандартни типове сокет. Опциите на сокета са дефинирани в jdk.net.ExtendedSocketOptions.

3) В клас HttpURLConnection, ако е инсталиран мениджър на сигурността и ако се извика метод, който води до опит за отваряне на връзка, повикващият трябва да притежава или 'connect'SocketPermission към комбинацията хост/порт на целевия URL адрес или URLPermission, който разрешава тази заявка.

Ако автоматичното пренасочване е активирано и тази заявка е пренасочена към друга дестинация, повикващият също трябва да има разрешение да се свърже с пренасочения хост/URL.


Подобрения на паралелността на Java 8

Пакетът java.util.concurrent добави два нови интерфейса и четири нови класа.

Java.util.concurrent интерфейси

Интерфейс Описание
публичен статичен интерфейс CompletableFuture.AsynchronousCompletionTask Това е маркерен интерфейс, който се използва за идентифициране на асинхронни задачи, произведени от асинхронни методи. Може да е полезно за наблюдение, отстраняване на грешки и проследяване на асинхронни дейности.
публичен интерфейс CompletionStage Той създава етап от евентуално асинхронно изчисление, което изпълнява действие или изчислява стойност, когато друг CompletionStage завърши.

Java.util.concurrent класове

Клас Описание
публичен клас CompletableFuture разширява Object прилага Future, CompletionStage Това е бъдеще, което може да бъде изрично завършено и може да се използва като етап на завършване, поддържащ зависими функции и действия, които се задействат след неговото завършване.
публичен статичен клас ConcurrentHashMap.KeySetView разширява Object прилага Set, Serializable Това е изглед на ConcurrentHashMap като набор от ключове, в който добавките могат по желание да бъдат активирани чрез картографиране към обща стойност.
публичен абстрактен клас CountedCompleter разширява ForkJoinTask ForkJoinTask с действие за завършване, извършено при задействане и няма оставащи чакащи действия.
публичен клас CompletionException разширява RuntimeException Той хвърля изключение, когато възникне грешка или друго изключение в хода на изпълнение на резултат или задача.

Нови методи в класа java.util.concurrent.ConcurrentHashMap

Класът ConcurrentHashMap въвежда няколко нови метода в последната си версия. Той включва различни методи forEach (forEach, forEachKey, forEachValue и forEachEntry), методи за търсене (търсене, searchKeys, searchValues ​​и searchEntries) и голям брой методи за намаляване (reduce, reduceToDouble, reduceToLong и др.). Добавени са и други различни методи (mappingCount и newKeySet).

Нови класове в java.util.concurrent.atomic

Последната версия въвежда мащабируема, обновяема поддръжка на променливи чрез малък набор от нови класове DoubleAccumulator, DoubleAdder, LongAccumulator и LongAdder. Той вътрешно използва техники за намаляване на конкуренцията, които осигуряват огромни подобрения на производителността в сравнение с променливите на Atomic.

Клас Описание
публичен клас DoubleAccumulator разширява Number прилага Serializable Използва се за една или повече променливи, които заедно поддържат работеща двойна стойност, актуализирана с помощта на предоставена функция.
публичен клас DoubleAdder разширява Number прилага Serializable Използва се за една или повече променливи, които заедно поддържат първоначално нулева двойна сума.
публичен клас LongAccumulator разширява Number прилага Serializable Използва се за една или повече променливи, които заедно поддържат текуща дълга стойност, актуализирана с помощта на предоставена функция.
публичен клас LongAdder разширява Number прилага Serializable Използва се за една или повече променливи, които заедно поддържат първоначално нулева дълга сума.

Нови методи в класа java.util.concurrent.ForkJoinPool

Този клас добави два нови метода getCommonPoolParalleism() и commonPool(), които връщат целевото ниво на паралелизъм на общия пул или съответно екземпляра на общия пул.

Метод Описание
публичен статичен ForkJoinPool commonPool() Връща екземпляра на общия пул.
Публичен статичен int getCommonPoolParalleism() Той връща целевото ниво на паралелизъм на общия пул.

Нов клас java.util.concurrent.locks.StampedLock

Добавен е нов клас StampedLock, който се използва за добавяне на базирано на възможности заключване с три режима за контролиране на достъпа за четене/запис (писане, четене и оптимистично четене). Този клас също поддържа методи, които условно осигуряват преобразувания в трите режима.

Клас Описание
публичен клас StampedLock разширява Object implements Serializable Този клас представлява заключване, базирано на възможности, с три режима за контролиране на достъпа за четене/запис.

Java API за XML обработка (JAXP) 1.6 Подобрения

В Java 8, Java API е добавен за XML обработка (JAXP) 1.6. Изисква се използването на инструмента за зареждане на доставчика на услуги, който е дефиниран от java.util.ServiceLoader за зареждане на услуги от конфигурационните файлове на услугата.

Обосновката за това е да се даде възможност за бъдещо модулиране на платформата Java SE, където доставчиците на услуги могат да бъдат внедрени със средства, различни от JAR файлове и може би без конфигурационните файлове на услугата.


Подобрения на виртуалната машина на Java

Проверката на invokespecial инструкциите е затегната, така че да може да бъде извикан само метод за инициализация на екземпляр в текущия клас или неговия директен суперклас.


Java Mission Control 5.3 е включен в Java 8

Java Mission Control (JMC) е усъвършенстван набор от инструменти, който позволява ефективен и подробен анализ на данни и предоставя усъвършенствано, ненатрапчиво наблюдение и управление на Java. JMC предоставя секции за общи области на анализ като производителност на кода, памет и латентност.

Езиковите пакети Babel на японски и опростен китайски вече са включени по подразбиране в Java Mission Control, който е включен в JDK 8.


Подобрения в интернационализацията на Java 8

1) Подобрения на Unicode

JDK 8 включва поддръжка за Unicode 6.2.0. Той съдържа следните функции.

  • 733 нови знака, включително знак за турска лира.
  • 7 нови скрипта:
    • Мероитски йероглифи
    • Мероитски курсив
    • Сора Сомпенг
    • Чакма
    • Шарада
    • Такри
    • Мяо
  • 11 нови блока: включително 7 блока за новите скриптове, изброени по-горе, и 4 блока за следните съществуващи скриптове:
  • Арабски разширен-A
  • Сунданска добавка
  • Meeting Meek Extensions
  • Арабски математически азбучни символи

Приемане на Unicode CLDR данни и системното свойство java.locale.providers

Консорциумът Unicode пусна проекта Common Locale Data Repository (CLDR) за „поддръжка на световните езици, с най-голямото и най-обширното стандартно хранилище на достъпни локални данни.“ CLDR се превръща в де факто стандарт за локални данни. Базираните на CLDR локални данни на XML са включени в версията на JDK 8, но са деактивирани по подразбиране.

Има четири различни източника за локални данни:

  • CLDR представлява локалните данни, предоставени от проекта Unicode CLDR.
  • HOST представлява персонализирането на текущия потребител на настройките на основната операционна система. Работи само с локала по подразбиране на потребителя и персонализираните настройки може да варират в зависимост от операционната система, но основно се поддържат формати за дата, час, число и валута.
  • SPI представлява чувствителните към локала услуги, внедрени в инсталираните SPI доставчици.
  • JRE представлява локалните данни, които са съвместими с предишните версии на JRE.

За да изберете желания източник на данни за локализация, използвайте системното свойство java.locale.providers. изброяване на източниците на данни в предпочитания ред. Например: java.locale.providers=HOST,SPI,CLDR,JRE Поведението по подразбиране е еквивалентно на следната настройка: java.locale.providers=JRE,SPI


Java 8 Нов календар и локален API

JDK 8 включва два нови класа, няколко нови метода и нова върната стойност за съществуващ статичен метод.

Два нови абстрактни класа за доставчици на услуги се добавят към пакета java.util.spi.

Клас Описание
публичен абстрактен клас CalendarDataProvider разширява LocaleServiceProvider Това е абстрактен клас за доставчици на услуги, които предоставят зависещи от локала параметри на календара.
публичен абстрактен клас CalendarNameProvider разширява LocaleServiceProvider Това е абстрактен клас за доставчици на услуги, които предоставят локализирани низови представяния (показвани имена) на стойностите на полетата на календара.

Статичен метод вече може да разпознава Locale.UNICODE_LOCALE_EXTENSION за системата за номериране.

Метод Описание
public static final DecimalFormatSymbols getInstance(Locale locale) Използва се за получаване на екземпляра DecimalFormatSymbols за посочения локал. Този метод осигурява достъп до екземпляри на DecimalFormatSymbols за локали, поддържани от самата среда за изпълнение на Java, както и за тези, поддържани от инсталирани реализации на DecimalFormatSymbolsProvider. Той хвърля NullPointerException, ако локалът е null.

Добавени са нови методи в API на календара:

Метод Описание
public boolean isSupportedLocale(Locale locale) Връща истина, ако дадената локализация се поддържа от този доставчик на локална услуга. Даденият локал може да съдържа разширения, които трябва да се вземат предвид при определяне на поддръжката. Дефинира се в клас java.util.spi.LocaleServiceProvider
публичен низ getCalendarType() Той връща вида на календара на този календар. Типовете календари се определят от спецификацията на Unicode Locale Data Markup Language (LDML). Дефиниран е в класа java.util.Calendar.

Добавени са нови спецификатори на стил за методите Calendar.getDisplayName и Calendar.getDisplayNames, за да се определи формата на името на календара.


Спецификатор Описание
public static final int SHORT_FORMAT Това е спецификатор на стил за getDisplayName и getDisplayNames, указващ кратко име, използвано за формат.
public static final int LONG_FORMAT Това е спецификатор на стил за getDisplayName и getDisplayNames, указващ дълго име, използвано за формат.
public static final int SHORT_STANDALONE Това е спецификатор на стил за getDisplayName и getDisplayNames, указващ кратко име, използвано независимо, като съкращение на месеца като заглавки на календара.
public static final int LONG_STANDALONE Това е спецификатор на стил за getDisplayName и getDisplayNames, указващ дълго име, използвано независимо, като име на месец като заглавки на календара.

Два нови локални метода за работа с разширения (по избор) на локал.

Метод Описание
public boolean hasExtensions() Връща истина, ако този локал има някакви разширения.
public Locale stripExtensions() Връща копие на този локал без разширения. Ако този локал няма разширения, този локал се връща сам.

Два нови метода Locale.filter връщат списък с екземпляри на Locale, които отговарят на посочените критерии, както е дефинирано в RFC 4647:

Метод Описание
публичен филтър за статичен списък (List priorityList, Collection locales) Той връща списък със съвпадащи екземпляри на Locale, използвайки механизма за филтриране, дефиниран в RFC 4647. Това е еквивалентно на filter(List, Collection, FilteringMode), когато режимът е Locale.FilteringMode.AUTOSELECT_FILTERING.
public static List filter (List priorityList, Collection locales, Locale.FilteringMode mode) Той връща списък със съвпадащи екземпляри на Locale, използвайки механизма за филтриране, дефиниран в RFC 4647.

Два нови метода Locale.filterTags връщат списък с езикови тагове, които отговарят на посочените критерии, както е дефинирано в RFC 4647.

Метод Описание
public static List filterTags (Списък с приоритети, Тагове за колекция) Той връща списък със съответстващи езикови тагове, като използва основния механизъм за филтриране, дефиниран в RFC 4647. Това е еквивалентно на filterTags(List, Collection, FilteringMode), когато режимът е Locale.FilteringMode.AUTOSELECT_FILTERING.
public static List filterTags (List priorityList, Collection tags, Locale.FilteringMode mode) Той връща списък със съвпадащи езикови тагове, използвайки основния механизъм за филтриране, дефиниран в RFC 4647.

Два нови метода за търсене връщат най-добре съвпадащия локал или езиков таг, като използват механизма за търсене, дефиниран в RFC 4647.

Метод Описание
публично статично локално търсене (List priorityList, локали на колекция) Той връща екземпляр на Locale за най-добре съвпадащия езиков таг, като използва механизма за търсене, дефиниран в RFC 4647.
Публичен статичен String lookupTag(List priorityList,Collection tags) Той връща езиковия таг с най-добро съответствие, като използва механизма за търсене, дефиниран в RFC 4647.

Други подобрения на версията на Java 8

Подобрения в JDK 8u5

1) Честотата, с която се показват подканите за сигурност за приложение, е намалена.


Подобрения в JDK 8u11

1) Опция за потискане на предложения от спонсори, когато JRE е инсталиран или актуализиран, е налична в раздела Разширени на контролния панел на Java.

2) Атрибутът Entry-Point може да бъде включен в манифеста на JAR файла, за да идентифицира един или повече класове като валидна входна точка за вашето RIA (Rich Internet application).


Подобрения в JDK 8u20

1) Инструментът javafxpackager е преименуван на javapackager. Този инструмент е подобрен с нови аргументи за самостоятелни пакети за приложения.

Следните подобрения са свързани с инструмента java:

  • Добавена е експериментална опция за JIT компилатор, свързана с ограничена транзакционна памет (RTM).
  • Добавени са няколко опции, свързани с дедупликацията на низове.
  • Добавени са няколко опции, свързани с вътрешните характеристики на Advanced Encryption Standard (AES).
  • Комбинациите от опции за събиране на отпадъци са отхвърлени.

2) Ръководството за настройка на събирането на отпадъци е добавено към виртуалната машина на Java HotSpot. Той описва събирачите на боклук, включени в Java HotSpot VM, и ви помага да решите кой събирач на боклук може най-добре да оптимизира производителността на вашето приложение, особено ако обработва големи количества данни (няколко гигабайта), има много нишки и има високи скорости на транзакции .


Подобрения в JDK 8u31

1) В тази версия протоколът SSLv3 е премахнат от разширените опции на контролния панел на Java.


Подобрения в JDK 8u40

Java инструмент

1) -XX:+CheckEndorsedAndExtDirs е добавен, тъй като механизмът за отмяна на одобрените стандарти (JDK-8065675) и механизмът за разширение (JDK-8065702) са отхвърлени. Опцията помага да се идентифицират всички съществуващи употреби на тези механизми и се поддържа в JDK 7u80 и JDK 8u40.

2) Java Flight Recorder (JFR) предлага различни начини за отключване на комерсиални функции и активиране на JFR по време на изпълнение на приложение.

Той включва опции на командния ред на Java, като диагностични команди jcmd и контроли на графичния потребителски интерфейс (GUI) в Java Mission Control. Тази гъвкавост ви позволява да предоставите подходящите опции при стартиране или да взаимодействате с JFR по-късно.

3) Опцията -XX:StartFlightRecording=параметър=стойност има нов параметър, dumponexit=true, който указва дали трябва да се генерира дъмп файл с JFR данни, когато JVM приключи по контролиран начин.

4) Опциите, свързани с ограничената транзакционна памет (RTM), вече не са експериментални. Тези опции включват -XX:RTMAbortRatio=abort_ratio, -XX:RTMRetryCount=number_of_retries, -XX:+UseRTMDeopt и -XX:+UseRTMLocking.

5) В Java 8 беше въведено споделяне на данни от клас приложения (AppCDS). AppCDS разширява CDS (Споделяне на данни от класове), за да позволи класовете от стандартните директории на разширения и пътя на класа на приложението да бъдат поставени в споделения архив. Това е комерсиална функция и вече не се счита за експериментална.

6) Добавени са нови опции -XX:+ResourceManagement и -XX:ResourceManagementSampleInterval=value.

7) Добавена е допълнителна информация за големи страници. Големите страници, известни още като огромни страници, са страници с памет, които са значително по-големи от стандартния размер на страницата с памет. Големите страници оптимизират процесора Translation-Lookaside Buffers. Опциите за Linux -XX:+UseHugeTLBFS, -XX:+UseSHM и -XX:+UseTransparentHugePages са документирани.

8) Опцията -XX:ObjectAlignmentInBytes=alignment е документирана.

JJS инструмент

1) Добавена е опцията --optimistic-types=[true|false]. Той активира или деактивира оптимистични предположения с деоптимизиращо повторно компилиране.

2) Опцията --language=[es5] е добавена към инструмента jjs. Той определя езиковата версия на ECMAScript.

Инструмент Javapackager

1) Налични са нови аргументи за пакети за OS X. Аргументът mac.CFBundleVersion идентифицира вътрешния номер на версията, който ще се използва.

ляво съединяване срещу дясно съединяване

2) Аргументът mac.dmg.simple показва дали стъпките за персонализиране на DMG, които зависят от изпълнението на AppleScript код, са пропуснати.

Инструмент Jcmd

Инструментът Jcmd се използва за динамично взаимодействие с Java Flight Recorder (JFR). Можете да го използвате, за да отключите търговски функции, да активирате/стартирате/спирате записи на полети и да получавате различни съобщения за състоянието от системата.

Инструмент Jstat

Инструментът jstat е актуализиран с информация за компресираното класово пространство, което е специална част от метапространството.

Виртуална машина

Функцията Scalable Native Memory Tracking HotSpot VM помага за диагностициране на течове на памет на VM и изяснява на потребителите, когато течове на памет не са във VM. Native Memory Tracker може да се изпълнява без самоизключване на големи системи и без да причинява значително въздействие върху производителността над това, което се счита за приемливо за малки програми.