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

Java вступает в подростковый возраст 🎉 🎂 ⒔

Java 13 выходит 17 сентября. С этим выпуском Java официально вступает в свои права… С тегами java, программирование, jvm, функции.

Java 13 выходит 17 сентября.

С этим выпуском Java официально вступает в свой подростковый возраст.

JVM загружает класс с диска. После загрузки сгенерированный байт-код будет проверен. Проверенный байт-код будет извлечен JVM во внутренние структуры данных. Они хранятся в архиве, называемом “Архивы общего доступа к данным класса (CDS)”.

Эта начальная загрузка займет некоторое время для запуска выполнения приложения. Чтобы ускорить время запуска приложения, мы можем использовать архив компакт-дисков. JVM вместо того, чтобы вручную загружать классы, проверять и устанавливать их в свои внутренние структуры данных, она будет извлекать информацию из архивов CDS.

Обычно большинство приложений Java будут иметь тысячи классов для загрузки во время запуска. Это увеличит время загрузки приложения на несколько секунд.

До Java 12 мы должны вручную предоставлять список классов для архивирования JVM. Используя -XX:DumpLoadedClassList=список классов .

Но из Java 13 с -XX:ArchiveClassesAtExit=app-cds.jsa . JVM создаст архивные классы при выходе. Класс архива app-cds.jsa .

Затем, когда приложение будет запущено снова, JVM будет использовать этот архив для более быстрой загрузки. Мы должны указать JVM использовать архив с помощью -XXSharedArchiveFile=app-cds.jsa

Примечание: Всякий раз, когда происходит изменение пути к классу, архив становится недействительным, и JVM должна сделать новый снимок архива.

Узнайте больше об архивах обмена данными динамического класса здесь и подробнее здесь об обмене данными класса JEP-310.

JEP-325 представил выражения переключения в качестве функции предварительного просмотра в Java 12.

Мы можем либо использовать case expression (или) function -> , как показано ниже:

boolean isTrue = switch (valueToCheck) {
  case "True", "Truthy", "Correct", "Valid" -> true;
  case "False", "Falsey", "InCorrect", "Invalid" -> false;
  default -> throw new NotValidException("some valid message");
}

или функция case expression (или): :

boolean isTrue = switch (valueToCheck) {
  case "True", "Truthy", "Correct", "Valid":
    yield true;
  case "False", "Falsey", "InCorrect", "Invalid":
    yield false;
  default:
    throw new NotValidException("some valid message");
}

Узнайте больше о выражениях switch/| здесь .

Многострочные строки или текстовые блоки – это давно ожидаемая функция в Java. При большом количестве SQL-запросов, XML или HTML в приложениях Java работать с многострочными строками одновременно сложно и громоздко.

Эта функция позволяет нам легко и менее громоздко писать многострочную строку с отступом.

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

String html = """
              
                  
                      

Hello, world

"""; String query = """ SELECT `EMP_ID`, `LAST_NAME` FROM `EMPLOYEE_TB` WHERE `CITY` = 'INDIANAPOLIS' ORDER BY `EMP_ID`, `LAST_NAME`; """;

Узнайте больше о текстовых блоках здесь .

Сборщик мусора Z , также известный как ZGC, представляет собой масштабируемый сборщик мусора с низкой задержкой, предназначенный для достижения следующих целей:

  • Время паузы не превышает 10 мс
  • Время паузы не увеличивается с увеличением размера кучи или текущего набора
  • Обрабатывать кучи размером от нескольких сотен мегабайт до нескольких терабайт

Работая в облаке, вы должны платить за то, что используете. В приложениях Java GC зарезервирует размер кучи, который больше, чем необходимо для приложения. Важно освободить неиспользуемую память в этих средах с низким уровнем ресурсов . Другой Gc (GC1 и Шенандоа ) освободит неиспользуемую память по истечении указанного времени.

Аналогичным образом, мы можем настроить ZGC также на освобождение неиспользуемой памяти через определенный промежуток времени, используя следующую опцию -XX:ZUncommitDelay=<секунды> .

Это увеличит ресурсы, которые может использовать ваше приложение.

Узнайте больше об этой функции здесь .

Кроме того, для сборщика мусора Z мы можем указать максимальный размер кучи, используя -XXSoftMaxHeapSize=<байты> . Это предотвращает размер кучи в пределах указанного значения. Помните, что это мягкое ограничение, когда есть абсолютная необходимость избегать OOM, JVM может увеличить размер кучи до -Xmx .

Сборщик мусора Z теперь может использовать 16 ТБ размера кучи. (Это огромно…).

В java.net . Гнездо и java.net . ServerSocket был частью старого кода, который был написан с использованием некоторого собственного кода (Java и C).

С помощью Nio Socket Impl , который является заменой PlainSocketImpl . Машинный код полностью заменен новой реализацией ввода-вывода/| (NIO).

Он также заменяет трудно отлаживаемые синхронизированные методы на параллельные блокировки .

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

Это упрощает отладку, а также выравнивание с fibers в будущем.

Узнайте больше об этой функции здесь .

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

Оригинал: “https://dev.to/sendilkumarn/java-enters-its-teen-age-4626”