Главная
АИ #9 (244)
Статьи журнала АИ #9 (244)
Современное программирование на Java

Современное программирование на Java

Рубрика

Информационные технологии

Ключевые слова

Java
структурированный параллелизм
виртуальные потоки
шаблоны строк

Аннотация статьи

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

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

Текст статьи

Непреходящее наследие Java основано на ее новаторском подходе к кроссплатформенной разработке, ее влиянии на парадигмы программирования и ее роли в разработке корпоративных приложений. Введение и широкое распространение объектно-ориентированного программирования (ООП) в Java существенно повлияли на то, как разрабатывается и структурируется программное обеспечение. Принципы ООП стали стандартом в программировании, и Java сыграла решающую роль в этом изменении парадигмы.

Нововведение Java в виде концепции WORA «Write Once, Run Anywhere» позволило разработчикам писать код, который мог работать на любой платформе с помощью виртуальной машины Java (JVM), независимо от базовой операционной системы. Эта независимость от платформы устранила необходимость в разработке, ориентированной на платформу, что сделало Java универсальным выбором для кроссплатформенных приложений.

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

Более того, Java стал предпочтительным языком для создания крупномасштабных корпоративных приложений, веб-сервисов и компонентов промежуточного программного обеспечения. Его способность обеспечивать масштабируемость, надежность и высокую производительность сделала его идеальным выбором для предприятий по всему миру, а обширная экосистема библиотек и фреймворков Java упрощает общие задачи программирования. Разработчики могут получить доступ к инструментам для всего: от подключения к базам данных до проектирования пользовательского интерфейса. Этот богатый репозиторий ресурсов ускоряет разработку и сокращает время выхода на рынок.

Несмотря на критику Java на протяжении многих лет, он остается одним из самых популярных и широко используемых языков программирования и в 2024 году. Неизменная актуальность Java очевидна в различных статистических показателях и отраслевых опросах, постоянно подчеркивающих его известность и спрос. Например, согласно индексу TIOBE за 2023 год, Java по-прежнему входит в пятерку лучших языков программирования среди Python, C и C++.

Аналогично, рейтинг языков программирования RedMonk за первый квартал 2023 года поставил Java на третье место по популярности после JavaScript и Python на основе данных GitHub и StackOverflow.

Чтобы определить, отстает ли Java, нам нужно проанализировать, что предлагают современные языки программирования. Вот несколько ключевых аспектов, которые следует учитывать:

  1. Сильная система типов. Система типов Java надежна, но в ней отсутствуют некоторые продвинутые функции, такие как типы более высокого уровня, которые есть в таких языках, как Rust.
  2. Управление памятью. Языки должны предлагать эффективное управление памятью, либо посредством автоматической сборки мусора, либо современных функций безопасности памяти, чтобы предотвращать распространенные ошибки, связанные с памятью.
  3. Абстракция. Современные языки должны позволять разработчикам работать на разных уровнях абстракции, от низкоуровневого управления памятью до высокоуровневых, специфичных для домена концепций, что позволяет создавать эффективный и лаконичный код.
  4. Поддержка параллелизма. С учетом популярности многоядерных процессоров языки должны предлагать функции для управления параллелизмом, такие как потоки, async/await и параллельная обработка, чтобы помочь разработчикам писать эффективный и масштабируемый код.
  5. Нейтральность к платформе. Философия Java «написать один раз, запустить где угодно» остается значительным преимуществом, особенно в корпоративных условиях.
  6. Инструментарий. Инструментарий Java является исключительным, с сильным акцентом на соблюдение соглашений и безопасность типов. Эти инструменты облегчают создание, тестирование и обслуживание приложений Java.
  7. Функции языка. Современные версии Java представили такие функции языка, как записи и сопоставление с шаблонами, что сокращает шаблонный код.

Завидное постоянство популярности Java объясняется несколькими ключевыми факторами:

  1. Кроссплатформенная совместимость – независимость Java от платформы остается убедительной особенностью. Вы можете написать код один раз и развернуть его на различных операционных системах без изменений. Это лучший выбор для программного обеспечения, работающего на различных платформах, включая настольные компьютеры, серверы и мобильные устройства Android.
  2. Корпоративное доминирование – Java закрепилась в корпоративном мире. Многие организации полагаются на Java для создания критически важных для бизнеса приложений, веб-сервисов и внутренних систем. Он известен своей масштабируемостью, стабильностью и способностью справляться с высокими нагрузками.
  3. Разработка приложений Android. Java продолжает оставаться популярной альтернативой для разработки приложений Android. Взаимодействие Java с Kotlin упрощает разработчикам разработку в существующей кодовой базе Java, используя новые функции Kotlin.
  4. Универсальные варианты использования – Java универсален, поддерживает различные парадигмы программирования. Он подходит для всего: от веб-разработки до науки о данных, научных вычислений и корпоративных приложений.
  5. Безопасность – наследие Java также переплетено с его непоколебимой приверженностью безопасности со встроенными механизмами для обработки шифрования, аутентификации и контроля доступа. Это делает его популярным выбором, если вы разрабатываете приложения, требующие высокой безопасности, такие как финансовые системы и платформы здравоохранения.

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

С помощью серии усовершенствований языка и проектов модернизации новые версии Java в сочетании с такими инициативами, как Project Valhalla, в значительной степени устранили многие проблемы.

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

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

Итак, Java появилась с новыми захватывающими функциями, которые вызвали обсуждения среди разработчиков на разных платформах разработки, таких как Reddit. Хотя Java 21 предлагает новые функции, некоторые разработчики по-прежнему ценят сильные стороны Java 8 и такие функции, как лямбда-выражения.

Вот обзор некоторых интересных функций, которые вы можете найти в новом выпуске JDK 21:

Structured Concurrency API

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

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

Структурированный параллелизм и непрерывная обратная связь (CF) улучшают наблюдаемость параллельного кода

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

Digma, платформа непрерывной обратной связи, дополнительно усиливает процесс наблюдения, гарантируя вам доступ к ключевым идеям на протяжении всего цикла разработки. С CF в качестве вашего компаньона по наблюдению вы можете заранее выявлять и решать проблемы, а не просто реагировать на них. Такое сочетание структурированного параллелизма и непрерывной обратной связи позволяет разработчикам получать глубокие знания о параллельных системах. Digma использует OpenTelemetry за кулисами для сбора данных (трейсов, журналов и метрик) о вашем коде, когда вы запускаете его локально. Вы также можете легко пересылать тестовые и производственные данные в Digma. После сбора данных Digma анализирует их, чтобы обнаружить значимые идеи о коде. Он ищет регрессии, аномалии, запахи кода или другие шаблоны, которые могут быть полезны для понимания кода и использования в разработке. Эффективно сокращая цикл обратной связи для разработчиков.

Отношения родитель-потомок

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

Изоляция ошибок

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

Жизненные циклы и области действия

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

Структурированные дампы потоков

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

Виртуальные потоки

Виртуальные потоки, которые изначально были представлены как предварительная функция в JDK 19 и JDK 20, теперь официально появились в JDK 21. Каждый экземпляр java.lang.Thread традиционно ассоциировался с потоком платформы, привязывая его к базовому потоку ОС на протяжении всего его жизненного цикла.

Однако виртуальные потоки привносят сдвиг парадигмы. Все еще существуют экземпляры java.lang.Thread, но они работают таким образом, что они запускают код Java в базовом потоке ОС, не монополизируя его. Это усовершенствование Java позволяет разработчикам использовать преимущества виртуальных потоков, делая параллельное программирование более эффективным и адаптивным.

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

Например, Java Flight Recorder (JFR) бесшовно взаимодействует с виртуальными потоками, позволяя генерировать события, когда виртуальный поток начинает или завершает свое выполнение, определяет случаи, когда виртуальный поток не запускается, и обнаруживает ситуации, когда виртуальный поток блокируется во время фиксации.

Сопоставление с образцом для switch

Основная цель этой функции – расширить возможности и универсальность выражений и операторов switch. Она также заключается в том, чтобы позволить шаблонам играть более заметную роль в метках case, обеспечивая немного большую гибкость при обработке значений null и делая операторы switch более безопасными, требуя полного охвата всех возможных входных значений с помощью операторов switch шаблона. И не волнуйтесь, если вы уже используете выражения и операторы switch; цель – гарантировать, что они продолжат работать так же, как и сейчас, без необходимости внесения каких-либо изменений.

public static double getPerimeter(Shape shape) throws IllegalArgumentException {

return switch (shape) {

case Rectangle r -> 2 * r.length() + 2 * r.width();

case Circle c -> 2 * c.radius() * Math.PI;

default -> throw new IllegalArgumentException("Unrecognized shape");

}

}

Пример кода выше вычисляет периметр только для экземпляров Rectangle или Circle.

Шаблоны строк

Шаблоны строк появились в Java, наконец-то обеспечив поддержку интерполяции строк, чего так долго ждали разработчики. До сих пор единственным выходом было объединение нескольких строк или работа со string.format, и, признаем, это раздражало. Новая же функция позволяет разработчикам брать строковые литералы и текстовые блоки Java и наполнять их шаблонами строк. Эти шаблоны творят чудеса, позволяя вам легко смешивать буквальный текст со встроенными выражениями и процессорами. Конечная цель здесь проста, но важна: сделать написание программ Java более плавным, повысить ясность выражений, объединяющих текст со значениями, и повысить безопасность программ Java, которые собирают строки из пользовательского ввода.

String name = "Isaac";

String info = STR."My name is \{name}";

assert info.equals("My name is Isaac"); // true

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

Заключение

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

У Java предсказуемый цикл выпуска, с регулярно добавляемыми новыми функциями и улучшениями. Такие проекты, как Valhalla, Panama и Loom, направлены на производительность, эффективность памяти и параллелизм, делая Java более конкурентоспособной и способной удовлетворять потребности современной разработки программного обеспечения.

Благодаря своей обширной экосистеме и правильным ноу-хау Java по-прежнему остается силой, с которой приходится считаться в современном ландшафте разработки программного обеспечения. Такие технологии, как Spring Boot и JavaEE, развиваются для поддержки микросервисов, контейнеризации и развертывания в облаке.

Java – это надежный и универсальный язык, подходящий для корпоративных приложений и разработки Android, полагающийся на автоматическое управление памятью. Rust выделяется своей безопасностью памяти и производительностью, предлагая детальный контроль над памятью. TypeScript, специально разработанный для веб-разработки, обеспечивает строгую типизацию и улучшенный инструментарий. Выбор среди этих языков зависит от требований проекта, потребностей в производительности и вашего знакомства с языком.

Список литературы

  1. Java все еще идет в ногу с современными языками программирования? Электронный ресурс: https://digma.ai/java-21-keeping-up-with-modern-programming-languages/.
  2. Список основных возможностей Java и JVM с JDK 17 по JDK 22. Электронный ресурс: https://digma.ai/a-list-of-major-java-and-jvm-features-since-jdk-17-to-22/.
  3. 9 лучших профилировщиков Java для использования в 2024 году. Электронный ресурс: https://digma.ai/9-best-java-profilers-to-use-in-2024/.
  4. Осадчий В.В. Многофакторная модель в коммерческой финансовой системе [Текст] / В.В. Осадчий // Журнал прикладных исследований. – 2021. – Т. 3. – № 3. – С. 12-16.
  5. Осадчий В.В. Сложный процент в инвестировании, как восьмое чудо света [Текст] // Актуальные вопросы современной экономики. – 2021. – № 3. – С. 100-105.

Поделиться

109

Стариков С. В. Современное программирование на Java // Актуальные исследования. 2025. №9 (244). Ч.I. С. 58-62. URL: https://apni.ru/article/11443-sovremennoe-programmirovanie-na-java

Обнаружили грубую ошибку (плагиат, фальсифицированные данные или иные нарушения научно-издательской этики)? Напишите письмо в редакцию журнала: info@apni.ru

Похожие статьи

Актуальные исследования

#10 (245)

Прием материалов

8 марта - 14 марта

Остался последний день

Размещение PDF-версии журнала

19 марта

Размещение электронной версии статьи

сразу после оплаты

Рассылка печатных экземпляров

2 апреля