Рубрики
Без рубрики

Функции Java 12

Java 12 была выпущена 19 марта 2019 года. Это версия, не относящаяся к LTS. Краткий обзор функций Java 12 для разработчиков, новых классов и методов в выпуске Java 12

Автор оригинала: Pankaj Kumar.

Наконец, JDK 12, который является частью шестимесячного цикла выпуска, находится здесь. Это происходит после последней версии Java LTS 11. Ранее мы подробно обсуждали функции Java 11. Сегодня мы обсудим функции Java 12 и посмотрим, что она может предложить разработчикам.

Java 12 была запущена 19 марта 2019 года. Это версия, не относящаяся к LTS. Следовательно, у него не будет долгосрочной поддержки.

Функции Java 12

Некоторые из важных функций Java 12 являются;

  1. Изменения JVM – JEP 189, JEP 346, JEP 344 и JEP 230.
  2. Переключение Выражений
  3. Метод несоответствия файлов()
  4. Компактное Форматирование Чисел
  5. Объединение коллекторов в потоковом API
  6. Java Строит новые методы – indent(), transform(), describeConstable () и resolveConstantDesc().
  7. JEP 334: API констант JVM
  8. JEP 305: Сопоставление шаблонов, например,
  9. Необработанные Строковые Литералы Удаляются Из JDK 12.

Давайте рассмотрим все эти функции Java 12 одну за другой.

Изменения в JVM

1. JEP 189 – Шенандоа: Сборщик Мусора с Низкой Задержкой (Экспериментальный)

Red Hat инициировала сборщик мусора Shenandoah, чтобы сократить время паузы в GC. Идея состоит в том, чтобы запускать GC одновременно с запущенными потоками Java.

Он нацелен на последовательные и предсказуемые короткие паузы, не зависящие от размера кучи. Поэтому не имеет значения, составляет ли размер кучи 15 МБ или 15 ГБ.

Это экспериментальная функция в Java 12.

2. JEP 346 – Быстро Верните Неиспользуемую Зафиксированную память из G1

Заявив Java 12, G1 теперь будет проверять память кучи Java во время бездействия приложения и возвращать ее в операционную систему. Это превентивная мера для сохранения и использования свободной памяти.

3. JEP 344: Прерываемые смешанные коллекции для G1

Повышение эффективности G1 включает в себя возможность прерывания смешанных коллекций G1, если они могут превысить заданный целевой показатель паузы. Это делается путем разделения смешанного набора коллекций на обязательный и необязательный. Таким образом, сборщик G1 может расставить приоритеты при сборе обязательного набора в первую очередь для достижения цели времени паузы.

4. JEP 230 и 344

Набор микробенчмарков, JEP 230 функция добавляет базовый набор микробенчмарков в исходный код JDK. Это позволяет разработчикам легко запускать существующие микрочипы и создавать новые.

Один порт AArch64, а не два, JEP 344 , удаляет все источники, связанные с портом arm64, сохраняя при этом 32-разрядный порт ARM и 64-разрядный порт aarch64. Это позволяет участникам сосредоточить свои усилия на единой 64-разрядной реализации ARM

5. Архивы компакт-дисков JEP 341 по умолчанию

Это улучшает процесс сборки JDK для создания архива совместного использования данных классов (CDS) с использованием списка классов по умолчанию на 64-разрядных платформах. Цель состоит в том, чтобы увеличить время запуска. Начиная с Java 12, компакт-диски по умолчанию включены.

Чтобы запустить программу с выключенными компакт-дисками, выполните следующие действия:

java -Xshare:off HelloWorld.java

Теперь это приведет к задержке времени запуска программы.

Языковые Изменения И Особенности

Java 12 представила множество языковых функций. Давайте рассмотрим некоторые из них с реализациями.

1. Переключение выражений (Предварительный просмотр)

Java 12 имеет улучшенные выражения переключения для сопоставления шаблонов. Введен в JEP 325 , в качестве функции языка предварительного просмотра, новый синтаксис L -> .

Ниже приведены некоторые вещи, которые следует отметить в отношении выражений переключения:

  • Новый синтаксис устраняет необходимость в операторе break для предотвращения провала.
  • Выражения переключения больше не выпадают.
  • Кроме того, мы можем определить несколько констант в одной и той же метке.
  • по умолчанию регистр теперь является обязательным в выражениях переключения.
  • break используется в выражениях переключения для возврата значений из самого обращения.

Классический оператор переключения:

String result = "";
        switch (day) {
            case "M":
            case "W":
            case "F": {
                result = "MWF";
                break;
            }
            case "T":
            case "TH":
            case "S": {
                result = "TTS";
                break;
            }
        };

        System.out.println("Old Switch Result:");
        System.out.println(result);

С новым выражением переключателя нам не нужно везде устанавливать прерывание, чтобы предотвратить логические ошибки!

String result = switch (day) {
            case "M", "W", "F" -> "MWF";
            case "T", "TH", "S" -> "TTS";
            default -> {
                if(day.isEmpty())
                    break "Please insert a valid day.";
                else
                    break "Looks like a Sunday.";
            }

        };

        System.out.println(result);

Давайте запустим приведенную ниже программу, содержащую новое выражение переключателя, используя JDK 12.

public class SwitchExpressions {

    public static void main(String[] args)
    {
        System.out.println("New Switch Expression result:");
        executeNewSwitchExpression("M");
        executeNewSwitchExpression("TH");
        executeNewSwitchExpression("");
        executeNewSwitchExpression("SUN");
    }

    public static void executeNewSwitchExpression(String day){

        String result = switch (day) {
            case "M", "W", "F" -> "MWF";
            case "T", "TH", "S" -> "TTS";
            default -> {
                if(day.isEmpty())
                    break "Please insert a valid day.";
                else
                    break "Looks like a Sunday.";
            }

        };

        System.out.println(result);
    }
}

Поскольку это функция предварительного просмотра, пожалуйста, убедитесь, что вы выбрали уровень языка в качестве предварительного просмотра Java 12. Чтобы скомпилировать приведенный выше код, выполните следующую команду:

javac -Xlint:preview --enable-preview -source 12 src/main/java/SwitchExpressions.java

После запуска скомпилированной программы в консоли мы получим следующее

2. Файл.Метод несоответствия

Java 12 добавила следующий метод для сравнения двух файлов:

public static long mismatch(Path path, Path path2) throws IOException

Этот метод возвращает положение первого несоответствия или-1L, если несоответствия нет.

Два файла могут не совпадать в следующих сценариях:

  • Если байты не идентичны. В этом случае возвращается позиция первого несоответствующего байта.
  • Размеры файлов не идентичны. В этом случае возвращается размер файла меньшего размера.

Пример фрагмента кода из IntelliJ Idea приведен ниже:

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;

public class FileMismatchExample {

    public static void main(String[] args) throws IOException {
        Path filePath1 = Files.createTempFile("file1", ".txt");
        Path filePath2 = Files.createTempFile("file2", ".txt");
        Files.writeString(filePath1,"JournalDev Test String");
        Files.writeString(filePath2,"JournalDev Test String");

        long mismatch = Files.mismatch(filePath1, filePath2);

        System.out.println("File Mismatch position... It returns -1 if there is no mismatch");

        System.out.println("Mismatch position in file1 and file2 is >>>>");
        System.out.println(mismatch);

        filePath1.toFile().deleteOnExit();
        filePath2.toFile().deleteOnExit();

        System.out.println();

        Path filePath3 = Files.createTempFile("file3", ".txt");
        Path filePath4 = Files.createTempFile("file4", ".txt");
        Files.writeString(filePath3,"JournalDev Test String");
        Files.writeString(filePath4,"JournalDev.com Test String");

        long mismatch2 = Files.mismatch(filePath3, filePath4);

        System.out.println("Mismatch position in file3 and file4 is >>>>");
        System.out.println(mismatch2);

        filePath3.toFile().deleteOnExit();
        filePath4.toFile().deleteOnExit();



    }

}

Вывод при компиляции и запуске вышеупомянутой программы Java является:

Несоответствие файлов Java Пример Вывода Программы

3. Компактное Форматирование Чисел

import java.text.NumberFormat;
import java.util.Locale;

public class CompactNumberFormatting {


    public static void main(String[] args)
    {
        System.out.println("Compact Formatting is:");
        NumberFormat upvotes = NumberFormat
                .getCompactNumberInstance(new Locale("en", "US"), NumberFormat.Style.SHORT);
        upvotes.setMaximumFractionDigits(1);

        System.out.println(upvotes.format(2592) + " upvotes");


        NumberFormat upvotes2 = NumberFormat
                .getCompactNumberInstance(new Locale("en", "US"), NumberFormat.Style.LONG);
        upvotes2.setMaximumFractionDigits(2);
        System.out.println(upvotes2.format(2011) + " upvotes");
    }


}

Вывод Программы Форматирования Компактных чисел Java

4. Объединение Коллекционеров

Teeing Collector-это новая утилита для сбора данных, представленная в API потоков.

Этот коллектор имеет три аргумента – два коллектора и двухфункцию. Все входные значения передаются каждому сборщику, и результат доступен в Bi-функции.

double mean = Stream.of(1, 2, 3, 4, 5)
                .collect(Collectors.teeing(
                        summingDouble(i -> i),
                        counting(),
                        (sum, n) -> sum / n));

System.out.println(mean);

На выходе получается 3.0 .

5. Новые методы строк Java

в Java 12 было введено 4 новых метода, которые:

  • отступ(int n)
  • преобразование(Функция супер строка,? расширяет R f)
  • Необязательно опишите констебля()
  • Строка resolveConstantDesc(методы.Поиск поиск)

Чтобы подробно узнать о вышеуказанных методах и их реализации, обратитесь к нашему учебнику по строковым методам Java 12.

6. JEP 334: API констант JVM

В этом JEP представлен новый пакет java.lang.constant . Это не очень полезно для тех разработчиков, которые не используют пул констант.

7. JEP 305: Сопоставление шаблонов, например (Предварительный просмотр)

Еще одна функция языка предварительного просмотра!

Старый способ преобразования типа в другой тип-это:

if (obj instanceof String) {
    String s = (String) obj;
    // use s in your code from here
}

Новый способ-это:

if (obj instanceof String s) {
    // can use s directly here
} 

Это избавляет нас от некоторых ненужных типизаций.

На этом заканчивается эта статья о функциях Java 12.