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

Распространенные мифы и заблуждения о Java

Развенчание нескольких ложных утверждений о Java. Помеченный java, мифы.

Среди разработчиков существует много неправильных мнений – некоторые из них коренятся в непонимании, недостатке знаний или плохом опыте из прошлого. Разработчики Java обычно в курсе изменений, но я часто слышу от разработчиков, не являющихся Java, и от общего мира ИТ, что:

  • Java работает медленно
  • Java глючит/небезопасна
  • Java не бесплатна, поэтому вам нужно много платить Oracle за лицензии
  • Java – это многословный, устаревший язык, с API, который неудобно использовать

Я понимаю, что без надлежащего контекста любая информация может быть неверно истолкована, поэтому я постараюсь склеить ее воедино, чтобы она имела смысл:).

Является ли Java медленным?

Короткий ответ: Нет .

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

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

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

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

Медлительность обычно возникает из-за опыта работы с плохо написанными, устаревшими приложениями (например, приложениями на основе графического интерфейса в Swing). К сожалению, Java предоставляет большую свободу для создания приложений, и может случиться так, что, хотя что-то работает, оно не обязательно должно хорошо работать. Я думаю, что этот ответ StackOverflow обобщает его лучше всего.

* Кстати, медлительность была вызвана запуском JVM, чтобы код мог выполняться.

Является ли Java глючным или небезопасным?

Короткий ответ: Нет .

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

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

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

Является ли Java бесплатной?

Короткий ответ: Да .

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

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

Java – это многословный, “доступный только для записи” и устаревший язык

Короткий ответ: Нет .

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

    private static void java7() {
        List persons = new ArrayList<>();
        persons.add(new Person("Luke Warm", 10));
        persons.add(new Person("John New", 15));
        persons.add(new Person("Elsa Snow", 19));
        persons.add(new Person("Mary Rose", 25));

        Map> adultAndChildrenMap = new HashMap<>();
        for (Person person : persons) {
            if (person.age >= 18) {
                if (adultAndChildrenMap.containsKey(Maturity.ADULT)) {
                    adultAndChildrenMap.get(Maturity.ADULT).add(person);
                } else {
                    List adults = new ArrayList<>();
                    adults.add(person);
                    adultAndChildrenMap.put(Maturity.ADULT, adults);
                }
            } else {
                if (adultAndChildrenMap.containsKey(Maturity.CHILD)) {
                    adultAndChildrenMap.get(Maturity.CHILD).add(person);
                } else {
                    List children = new ArrayList<>();
                    children.add(person);
                    adultAndChildrenMap.put(Maturity.CHILD, children);
                }
            }
        }
        System.out.println(adultAndChildrenMap);
    }

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

    private static void java11() {
        var persons = List.of(
                new Person("Luke Warm", 10),
                new Person("John New", 15),
                new Person("Elsa Snow", 19),
                new Person("Mary Rose", 25)
        );

        var adultAndChildrenMap = persons.stream()
                .collect(Collectors.groupingBy(
                        person -> person.age >= 18 ? Maturity.ADULT : Maturity.CHILD
                ));

        System.out.println(adultAndChildrenMap);
    }

Текущий цикл выпуска Java составляет 6 месяцев и хотя версия 11 – это LTS (долгосрочная поддержка), текущая версия – 14, которая приносит еще больше улучшений в качестве предварительного просмотра или стабильных функций. Проблема с Java заключается в том, что она катит большой “шар наследия”, который необходимо поддерживать (например, наличие методов по умолчанию в интерфейсах, представленных в Java 8 ).

Начиная с Java 8, наиболее заметного обновления Java, выпущенного в 2013 году, было много обновлений , которые направлены на уменьшение многословия и повышение читаемости, в том числе:

  • Улучшенные заводские методы для API сбора данных ( Map.of() , Set.of() и т.д.)
  • Улучшения API потока ( takeWhile/dropWhile )
  • Вывод типа локальной переменной ( var ArrayList<Строка>(); )
  • Улучшены Строковые служебные функции ( повтор() , isBlank() , отступ() и т.д.)
  • Многострочный Строка s:

  • Переключать выражения :

  • экземпляр/|соответствие шаблону :

    Записи
  • :

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

Вывод

К каждой из этих тем можно многое добавить, и стоит отметить, что иногда это не черно-белая ситуация (особенно с производительностью). Я также знаю, что подобные ложные утверждения существуют и для других языков (Python медленный, C#/.NET копирует Java или JavaScript, изобретенный инопланетянами, которые ждут, когда мы сойдем с ума, когда напишем приложение, используя его, а затем захватим планету).

Я надеюсь, что вам понравилась эта статья, и не стесняйтесь добавлять свои самые любимые мифы о Java или любом другом языке в комментариях!

Оригинал: “https://dev.to/rapasoft/common-java-myths-and-misconceptions-3knk”