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 8, Java представила новий API дати й часу. Пакет java.time містить класи дати й часу Java 8.

Для отримання додаткової інформації та прикладів: натисніть тут


Методи за замовчуванням

Java надає можливість створювати методи за замовчуванням всередині інтерфейсу. Методи, визначені всередині інтерфейсу та позначені ключовим словом за замовчуванням, називаються методами за замовчуванням. Ці методи є неабстрактними і можуть мати тіло методу.

Для отримання додаткової інформації та прикладів: натисніть тут


Двигун Rhino JavaScript

Nashorn — це двигун JavaScript. Він використовується для динамічного виконання коду JavaScript у JVM (Віртуальна машина Java). Java надає інструмент командного рядка тощо який використовується для виконання коду JavaScript.

Ви можете виконати код JavaScript двома способами:

  1. Використовуючи інструмент командного рядка jjs і
  2. Шляхом вбудовування у вихідний код Java.

Для отримання додаткової інформації та прикладів: натисніть тут


StringJoiner

Java додала новий кінцевий клас StringJoiner у пакет java.util. Він використовується для побудови послідовності символів, розділених роздільником. Тепер ви можете створити рядок, передавши роздільники, такі як кома(,), дефіс(-) тощо.

рядок до символу java

Для отримання додаткової інформації та прикладів: натисніть тут


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

Collectors — останній клас, який розширює клас Object. Він забезпечує операції скорочення, такі як накопичення елементів у колекціях, узагальнення елементів за різними критеріями тощо.

Для отримання додаткової інформації та прикладів: натисніть тут


API потоку

Пакет java.util.stream Java 8 складається з класів, інтерфейсів і 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) Алгоритми Advanced Encryption Standard (AES) і Password-Based Encryption (PBE), такі як PBEWithSHA256AndAES_128 і PBEWithSHA512AndAES_256, додано до постачальника SunJCE.

4) Java Secure Socket Extension (SunJSSE) увімкнув розширення індикації імені сервера (SNI) для клієнтських програм за замовчуванням у JDK 7, а JDK 8 підтримує розширення SNI для серверних програм. Розширення SNI — це функція, яка розширює протоколи SSL/TLS, щоб вказати, до якого імені сервера клієнт намагається підключитися під час рукостискання.

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

6) Новий прапор команди -importpassword додано до утиліти keytool. Він використовується для прийняття пароля та надійного зберігання його як секретного ключа. Для підтримки типу сховища ключів DKS додано такі класи, як java.security.DomainLoadStoreParameter і java.security.PKCS12Attribute.

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) До Kerberos 5 додано два нових типи rcache. Тип none означає відсутність rcache взагалі, а тип dfl означає файловий rcache у стилі DFL. Крім того, тепер підтримується запитаний підрозділ акцептора. Вони налаштовуються за допомогою системних властивостей sun.security.krb5.rcache та sun.security.krb5.acceptor.subkey.

13) У JDK 8 перехід протоколу Kerberos 5 і обмежене делегування підтримуються в одній області.

14) У Java 8 за замовчуванням вимкнено слабке шифрування. Типи шифрування Kerberos 5, пов’язані з DES, не підтримуються за умовчанням. Ці типи шифрування можна ввімкнути, додавши 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 запакована правильно.

3) Сторінка довідника команд Java (як nroff, так і HTML) була повністю перероблена. Розширені параметри тепер розділені на час виконання, компілятор, збір сміття та зручність обслуговування відповідно до сфери, на яку вони впливають. Тепер описано кілька параметрів, яких раніше не було. Існує також розділ для параметрів, які були застарілими або видаленими з попереднього випуску.

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

5) Ви можете отримати віддалений доступ до діагностичних команд, які раніше були доступні лише локально через інструмент jcmd. Віддалений доступ надається за допомогою Java Management Extensions (JMX), тому діагностичні команди доступні для MBean платформи, зареєстрованої на сервері MBean платформи. MBean — це інтерфейс com.sun.management.DiagnosticCommandMBean.

6) Нова опція -tsapolicyid включена в інструмент jarsigner, який дає вам змогу запитувати підписану позначку часу від органу, що займається штампуванням часу, і додавати її до підписаного файлу JAR.

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

8) Правила типу для двійкових порівнянь у Специфікації мови Java (JLS), Розділ 15.21, тепер будуть правильно застосовуватися javac.

9) У цьому випуску інструмент apt і пов’язаний з ним API, що міститься в пакеті com.sun.mirror, видалено.

Покращення Javadoc

У Java SE 8 до інструменту Javadoc додано такі нові API.

  • Новий API DocTree представляє сканер, який дає змогу переглядати вихідний код, представлений абстрактним синтаксичним деревом. Це розширює 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

У 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 extends Object implements Future, CompletionStage Це майбутнє, яке може бути завершено явно та може використовуватися як етап завершення, підтримуючи залежні функції та дії, які запускаються після його завершення.
публічний статичний клас ConcurrentHashMap.KeySetView розширює Object, реалізує Set, Serializable Це перегляд ConcurrentHashMap як набору ключів, у якому доповнення можуть бути опціонально ввімкнені шляхом зіставлення зі спільним значенням.
публічний абстрактний клас CountedCompleter розширює ForkJoinTask ForkJoinTask із дією завершення, яка виконується під час ініціювання, і немає жодних дій, що очікують на виконання.
відкритий клас CompletionException розширює RuntimeException Він створює виняток, коли під час виконання результату чи завдання виникає помилка чи інший виняток.

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

У своєму останньому випуску клас ConcurrentHashMap представляє кілька нових методів. Він включає різні методи forEach (forEach, forEachKey, forEachValue і forEachEntry), методи пошуку (search, searchKeys, searchValues ​​і searchEntries) і велику кількість методів скорочення (reduce, reduceToDouble, reduceToLong тощо). Також додано інші різні методи (mappingCount і newKeySet).

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

В останньому випуску представлена ​​масштабована, оновлювана підтримка змінних через невеликий набір нових класів DoubleAccumulator, DoubleAdder, LongAccumulator і LongAdder. Всередині нього використовуються методи зменшення конфліктів, які забезпечують величезні покращення пропускної здатності порівняно зі змінними Atomic.

Клас опис
публічний клас DoubleAccumulator розширює Number, реалізує Serializable Він використовується для однієї або кількох змінних, які разом підтримують поточне подвійне значення, оновлене за допомогою наданої функції.
загальнодоступний клас DoubleAdder extends Number реалізує Serializable Він використовується для однієї або кількох змінних, які разом зберігають спочатку нульову подвійну суму.
публічний клас LongAccumulator розширює Number, реалізує Serializable Він використовується для однієї або кількох змінних, які разом підтримують поточне довге значення, оновлене за допомогою наданої функції.
загальнодоступний клас LongAdder extends Number реалізує Serializable Він використовується для однієї або кількох змінних, які разом підтримують початкову нульову довгу суму.

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

Цей клас додав два нові методи getCommonPoolParalleism() і commonPool(), які повертають цільовий рівень паралелізму спільного пулу або екземпляра спільного пулу відповідно.

метод опис
публічний статичний ForkJoinPool commonPool() Він повертає екземпляр спільного пулу.
Public static int getCommonPoolParalleism() Він повертає цільовий рівень паралелізму спільного пулу.

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

Додано новий клас StampedLock, який використовується для додавання блокування на основі можливостей із трьома режимами керування доступом для читання/запису (запис, читання та оптимістичне читання). Цей клас також підтримує методи, які умовно забезпечують перетворення в трьох режимах.

Клас опис
публічний клас StampedLock розширює Object, реалізує Serializable Цей клас представляє блокування на основі можливостей із трьома режимами керування доступом для читання/запису.

Удосконалення Java API для обробки XML (JAXP) 1.6

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

java char до int

Обґрунтування цього полягає в тому, щоб дозволити майбутню модульність платформи 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(Мовна настройка) Він використовується для отримання екземпляра DecimalFormatSymbols для вказаної мови. Цей метод надає доступ до екземплярів DecimalFormatSymbols для локалей, які підтримуються самим середовищем виконання Java, а також для тих, що підтримуються встановленими реалізаціями DecimalFormatSymbolsProvider. Він викидає NullPointerException, якщо локаль дорівнює null.

Додано нові методи в API календаря:

метод опис
public boolean isSupportedLocale(локальний параметр) Він повертає true, якщо дана локаль підтримується цим постачальником послуг локалізації. Дана локаль може містити розширення, які слід враховувати для визначення підтримки. Його визначено в класі java.util.spi.LocaleServiceProvider
public String getCalendarType() Він повертає тип календаря цього календаря. Типи календарів визначаються специфікацією мови розмітки даних Unicode (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() Він повертає true, якщо ця мова має будь-які розширення.
public Locale stripExtensions() Він повертає копію цієї мови без розширень. Якщо ця мова не має розширень, ця мова повертається сама.

Два нові методи Locale.filter повертають список екземплярів Locale, які відповідають вказаним критеріям, як визначено в RFC 4647:

метод опис
публічний фільтр статичних списків (Список пріоритетів списку, локалі колекції) Він повертає список відповідних екземплярів 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(List priorityList, Collection tags) Він повертає список відповідних мовних тегів за допомогою базового механізму фільтрації, визначеного в 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.

метод опис
public static Locale lookup (List priorityList, Collection locales) Він повертає екземпляр 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

Наступні вдосконалення пов’язані з інструментом 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=parameter=value має новий параметр, 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 (Class Data Sharing), щоб класи зі стандартних каталогів розширень і шлях класу додатка розміщувалися в спільному архіві. Це комерційна функція, яка більше не вважається експериментальною.

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 допомагає діагностувати витоки пам’яті віртуальної машини та роз’яснювати користувачам, коли витоку пам’яті немає у віртуальній машині. Native Memory Tracker можна запускати без самостійного вимкнення у великих системах і без значного впливу на продуктивність, що перевищує прийнятне для малих програм.