15 сентября 2026 года вышла Java 27. Это не LTS-релиз, и новых возможностей языка, ради которых команды бросятся переписывать код, здесь немного. Зато поведение самой JVM меняется достаточно заметно.

Компактные заголовки объектов включаются по умолчанию, G1 становится стандартным сборщиком мусора даже в окружениях с небольшим количеством ресурсов, а Java Flight Recorder начинает автоматически скрывать пароли, токены и другие чувствительные значения.

Для Spring Boot-приложения это может означать меньше занятый heap без изменений в коде. А может означать неожиданно другой профиль потребления CPU в маленьком контейнере или неработающий стартовый скрипт из-за удалённого JVM-флага.

Разберёмся, что именно меняется и что стоит проверить до обновления.

Коротко

В Java 27 есть три важных изменения runtime:

  1. Compact Object Headers включены по умолчанию. Во многих приложениях это способно сократить занятый heap на 10–20%, но результат зависит от структуры объектов.

  2. G1 теперь выбирается по умолчанию во всех окружениях. Маленький контейнер, который раньше запускался с Serial GC, после обновления может получить другой профиль памяти, CPU и пауз.

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

Кроме того, удалены некоторые устаревшие JVM-флаги, изменился JSON-формат дампов потоков и появились новые диагностические возможности jcmd.

Откуда в Java-объекте лишние байты

Объект в heap состоит не только из объявленных нами полей. JVM хранит рядом служебную информацию:

  • состояние блокировки;

  • данные, связанные с identityHashCode;

  • возраст объекта для сборщика мусора;

  • ссылку на описание класса объекта.

В типичной 64-битной JVM с включёнными compressed class pointers заголовок объекта занимал 12 байт:

  • 8 байт для mark word;

  • 4 байта для ссылки на класс.

Из-за выравнивания объект без полей обычно занимал не 12, а 16 байт. Получалась любопытная ситуация: экземпляр пустого класса потреблял больше памяти на устройство JVM, чем на собственные данные.

final class Marker {
}

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

Особенно хорошо это заметно в Spring-приложениях. Сам фреймворк, библиотеки и пользовательский код формируют довольно насыщенный объектный граф ещё до обработки первого HTTP-запроса.

Что делают Compact Object Headers

Компактные заголовки объединяют compressed class pointer и mark word. В результате минимальный заголовок на 64-битной JVM уменьшается с 96–128 до 64 бит.

Фича прошла несколько стадий:

  • в JDK 24 она была экспериментальной;

  • в JDK 25 стала финальной, но требовала -XX:+UseCompactObjectHeaders;

  • в JDK 27 включается по умолчанию.

То есть после обновления больше не нужно добавлять специальный флаг. Отключить механизм для диагностики всё ещё можно:

java -XX:-UseCompactObjectHeaders -jar application.jar

Проверить текущее значение параметра можно так:

java -XX:+PrintFlagsFinal -version | grep UseCompactObjectHeaders

Действительно ли heap уменьшится на 20%

В материалах OpenJDK и Inside Java встречается оценка экономии heap в диапазоне 10–20%. Но её нельзя читать как обещание уменьшить потребление любого приложения ровно на 20%.

Результат зависит от объектного графа.

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

Если же основную часть heap занимают большие массивы byte[], кэши с крупными значениями или несколько тяжёлых структур, относительная экономия окажется скромнее.

Есть и важное различие между размером live set и лимитом heap. Если контейнер запускается с -Xmx2g, Java 27 не превратит этот параметр в -Xmx1600m. Уменьшиться может объём памяти, который занимают живые объекты. Это потенциально даёт:

  • больше свободного пространства внутри прежнего heap;

  • более редкие циклы сборки мусора;

  • меньше перемещаемых данных;

  • лучшую локальность данных в процессорном кэше;

  • возможность позднее уменьшить -Xmx, если это подтвердят измерения на вашем ворклоаде.

Сначала нужно сравнить метрики, и только затем менять лимиты контейнера.

Как проверить эффект на Spring Boot-приложении

Лучше всего сравнивать две конфигурации одной и той же Java 27:

java -XX:+UseCompactObjectHeaders -jar application.jar

и:

java -XX:-UseCompactObjectHeaders -jar application.jar

Так мы изолируем влияние компактных заголовков от остальных изменений между версиями JDK.

Во время теста стоит смотреть не только на максимальный RSS процесса, но и на:

  • размер live set после полной сборки;

  • частоту и длительность GC;

  • allocation rate;

  • количество старых объектов;

  • время прогрева;

  • p95 и p99 latency;

  • CPU на одинаковом профиле нагрузки.

Для анализа структуры отдельных классов можно использовать Java Object Layout:

System.out.println(
    org.openjdk.jol.info.ClassLayout
        .parseClass(OrderDto.class)
        .toPrintable()
);

Но JOL показывает layout конкретного объекта, а не экономику приложения целиком. Для итогового вывода всё равно понадобится профиль под реалистичной нагрузкой.

G1 теперь используется даже на маленьких машинах

G1 считается сборщиком мусора по умолчанию с JDK 9, но существовало исключение. Если JVM определяла окружение как машину с ограниченными ресурсами, она могла выбрать Serial GC.

В Java 27 это исключение убрали. Теперь G1 используется по умолчанию во всех окружениях, если сборщик не указан явно.

Узнать выбранный GC можно командой (или из GarbageCollectorMXBean):

java -Xlog:gc -version

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

Для обычного серверного приложения это выглядит логично. G1 умеет параллельно обрабатывать части heap и стремится удерживать паузы в заданных пределах. Но более современный GC не означает «лучший GC для любого процесса».

Serial GC прост, использует меньше служебных структур и может быть вполне разумным выбором для маленьких утилит, однопроцессорных окружений и сервисов с очень небольшим heap.

Почему это важно для Kubernetes

JVM учитывает ограничения контейнера, включая доступную память и количество процессоров. Поэтому изменение особенно заметно для небольших pod.

Представим Spring Boot-сервис с такими ресурсами:

resources:
  requests:
    cpu: "250m"
    memory: "256Mi"
  limits:
    cpu: "500m"
    memory: "384Mi"

На предыдущей версии JDK он мог автоматически получить Serial GC. После перехода на Java 27 тот же сервис без изменения параметров запуска получит G1.

Это способно изменить:

  • количество GC-потоков;

  • потребление CPU во время сборки;

  • служебные расходы GC;

  • длительность пауз;

  • поведение приложения при приближении к memory limit.

Если Serial GC был осознанным выбором, его лучше зафиксировать явно:

java -XX:+UseSerialGC -jar application.jar

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

JFR больше не должен записывать токены открытым текстом

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

Проблема в том, что вместе с полезными данными в запись могли попасть:

  • аргументы запуска JVM;

  • переменные окружения;

  • системные свойства.

Именно через эти механизмы приложения часто получают секреты:

export PAYMENT_API_TOKEN=super-secret-value

java \

  -Dspring.datasource.password=another-secret \

  -XX:StartFlightRecording=filename=application.jfr,duration=60s \

  -jar application.jar

Если такой файл попадал в тикет, общий каталог или систему хранения диагностики, секрет мог утечь вместе с ним.

В Java 27 JFR по умолчанию скрывает значения, названия которых похожи на:

  • password;

  • passwd;

  • token;

  • secret;

  • credential;

  • api-key;

  • private-key;

  • client-secret.

Сопоставление выполняется без учёта регистра и поддерживает glob-шаблоны.

Можно добавить собственное имя:

java \

  -XX:FlightRecorderOptions:redact-key=+dburl \
  -jar application.jar

Знак + здесь важен, так как он добавляет правило к стандартным фильтрам. Без него пользовательский список может заменить набор по умолчанию.

Для аргументов JVM используется отдельный параметр:

java \
  -XX:FlightRecorderOptions:redact-arguments=@redact-patterns.txt \
  -jar application.jar

Посмотреть доступные настройки можно через встроенную справку -XX:FlightRecorderOptions.

Почему одной редактуры JFR недостаточно

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

Во-первых, фильтрация основана на именах и шаблонах. Переменная PAYMENT_API_TOKEN будет распознана, а условная переменная ACCESS может не попасть под стандартное правило.

Во-вторых, приложение способно самостоятельно записать чувствительное значение в пользовательское JFR-событие, лог или exception message.

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

Получается, что автоматическая редактура является дополнительным защитным слоем, а не заменой Vault, Kubernetes Secrets, IAM и нормальной политики доступа к диагностике.

Какие старые JVM-флаги перестанут работать

В Java 27 окончательно удалены:

-noclassgc
-noverify
-verifyremote
-Xverify:none

Для -noclassgc существует замена:

-Xnoclassgc

Для -verifyremote:

-Xverify:remote

У -noverify и -Xverify:none прямой замены нет.

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

grep -R --line-number \
  -e=-noverify \
  -e=-Xverify:none \
  -e=-noclassgc \
  -e=-verifyremote \
  .

Также параметр:

-XX:InitiatingHeapOccupancyPercent

переименован в:

-XX:G1IHOP

Старое имя пока работает, но уже помечено устаревшим.

Опция -XX:[+|-]UseCompressedClassPointers стала obsolete. JVM всегда использует compressed class pointers, а передача старого параметра приведёт к предупреждению.

Ещё несколько изменений для эксплуатации

В jcmd появилась команда, которая показывает активные security properties работающей JVM:

jcmd <pid> VM.security_properties

Это полезно при разборе проблем с TLS, криптографическими провайдерами и алгоритмами, когда итоговая конфигурация отличается от ожидаемой.

VM.info и аварийные файлы hs_err_pid теперь содержат текущее количество открытых файловых дескрипторов. При расследовании падения можно быстрее заметить, что процесс подошёл к системному лимиту.

Изменился и JSON-формат thread dump. Идентификаторы потоков, их количество и PID теперь записываются числами, а не строками:

{
  "tid": 42
}

В корневом объекте появился formatVersion со значением 2.

Если внутренние инструменты разбирают JSON-дампы в строго типизированную модель и ожидают "tid": "42", после обновления они могут перестать работать. Это тот редкий breaking change, который затрагивает не приложение, а окружающую его диагностическую инфраструктуру.

Наконец, из JDK удалён экспериментальный JVM Compiler Interface, включая jdk.internal.vm.ci, встроенные компоненты Graal compiler и флаг -XX:+UseGraalJIT. Обычные Spring Boot-приложения этого не заметят, но нестандартные сборки и инструменты, которые полагались на JVMCI внутри OpenJDK, нужно проверить отдельно.

Стоит ли переходить

Java 27 не является LTS-релизом. Для большинства компаний основной production-версией останется Java 25, а следующей LTS станет Java 29.

Но пропускать Java 27 при тестировании не стоит.

Во-первых, Compact Object Headers уже стали финальной возможностью в Java 25. Java 27 показывает, каким будет стандартное поведение будущих версий.

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

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

Java 27 интересна не новым синтаксисом. Она меняет стоимость существующих объектов, правила выбора GC и безопасность эксплуатационных данных. Код может остаться прежним, но профиль приложения уже будет другим.

Именно поэтому этот релиз стоит проверять не глазами компилятора, а нагрузочными тестами, JFR и метриками контейнера.

Источники

Присоединяйтесь к русскоязычному сообществу разработчиков на Spring Boot в телеграм — Spring АйО, чтобы быть в курсе последних новостей из мира разработки на Spring Boot и всего, что с ним связано.

Комментарии (42)


  1. UbuRus
    14.09.2026 15:41

    Классно, ждем LTS


    1. BugM
      14.09.2026 15:41

      А зачем? Ничего нет же.


      1. cry_san
        14.09.2026 15:41

        Но ждать то можно...


      1. neiromand
        14.09.2026 15:41

        .


  1. OlegZH
    14.09.2026 15:41

    1. А где можно взять старые версии, если надо что-то из старого попробовать? Есть ли зеркала?

    2. Что это за ограничение от Oracle (или — от правительства США?) на распространение множества версий Java?

    3. Какую (стабильную?) версию сейчас Java следует использовать в обучении/в разработке?

    4. Может ли кто-нибудь порекомендовать пару-тройку хороших книг по Java?

    5. Что такое LTS? Это какая-то долгая поддержка? И В чём она выражается? И кого поддерживают? Надо ли где-то на Oracle регистрироваться?

    6. Есть ли сейчас хорошие и доступные среды разработки? Продолжают ли свою работу NetBeans и Eclipsce? Или достаточно Visual Code и PayCharm?

    7. Кто-нибудь может похвастаться своей разработкой на Java? Или показать на хороший продукт, созданный на Java?


    1. rpeMJIuH
      14.09.2026 15:41

      Сложно определиться, не троллинг ли это (если что, минус прилетел не от меня).

      Впрочем, в процессе написания текста ниже, словил себя на мысли, что возможно не просто так одна из Ваших статей писалась в Recovery mode.

      На всякий случай, если ощущения меня подводят и кому-то действительно не хватает подобной информации, короткие ответы:

      1 - Да там же, где и актуальные... Даже 8ая версия доступна для скачивания.

      2 - Пользуйтесь версиями посвежее, 21+, и в частных экспериментах точно никаких проблем.

      3 - Обучение - самая свежая. Разработка - последняя LTS, или на чём разрешено.

      4 - Практика лучше любых книг. Рекомендую Котлин, у них на официальной доке хорошее чтиво.

      5 - Хорошо объяснено на Википедии, без смс и регистрации. Табличка Java version history

      6 - На данный момент всё ещё рекомендую IntelliJ IDEA Community Edition. Бесплатно.

      7 - Отказываюсь ввязываться в дополнительную полемику.


      1. aldekotan
        14.09.2026 15:41

        Старые версии оракл даёт после регистрации скачать, зеркала подчищены по интернету на старьё, искал где-то год назад. А регу в России не сделать. Ну а с впн и регистрацией в другой стране, думаю, легче.


        1. Gaikotsu
          14.09.2026 15:41

          Ну старые версии OpenJDK вполне можно скачать к примеру отсюда - https://jdk.java.net/archive/

          И никаких регистраций и т.п. не требуется.


          1. aldekotan
            14.09.2026 15:41

            Благодарю!


        1. aleksandy
          14.09.2026 15:41

          А зачем тебе именно ораклячья jvm? Use the force sdkman, Luke. Без регистраций и СМС.


          1. OlegZH
            14.09.2026 15:41

            А в чём отличие? Не можете подробнее рассказать?


            1. orthoxerox
              14.09.2026 15:41

              Ни в чём, с точки зрения самого инструмента. Есть OpenJDK, который можно собрать самому или взять бесплатную сборку от вендора или энтузиастов. Но если нужна поддержка (или нужно доказать использование “российского” ПО), то надо брать платную сборку от вендора. Сборка от вендора обычно ничего не отличается от любой другой JDK, но у некоторых вендоров есть фишечки, например, IBM Semeru, Azul Prime, Red Hat Mandrel не используют стандартный JIT-компилятор. Для личных нужд или работы там, где нет особых ограничений, проще всего использовать Adoptium Eclipse Temurin. sdkman ставит именно её по умолчанию.


        1. MountainGoat
          14.09.2026 15:41

          Или вот ещё Coretto. Тоже работает напрямую.


        1. OlegZH
          14.09.2026 15:41

          зеркала подчищены по интернету на старьё

          Зачем?


        1. sergeybezrukov
          14.09.2026 15:41

          axiomjdk.ru - точно есть начиная с 8-й версии. Регистрация бесплатная.


      1. OlegZH
        14.09.2026 15:41

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

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

        А то, что касается хорошего продукта, то и вправду интересно. Вот, на чём написана сама среда IntelliJ IDEA? Кажется, оболочка MATLAB (в районе версий 6.5 и 7) была написана на Java.

        Лично я сейчас одинаково далёк и от Java, и от C#. Хотя, именно сейчас могу обратиться именно к этим языкам программирования. Я не люблю холивары. Но если есть какие-нибудь важные вопросы (производительности, удобства синтаксиса и семантики, архитектуры), то имеет смысл провести подробный (и честный) сравнительный анализ.


        1. akardapolov
          14.09.2026 15:41

          Java очень подходит для начального обучения программированию, аналог Basic-a который раньше преподавали в школах. Можно здесь посмотреть, база знаний по software engineering. Там в том числе информация по ЯП, истории их создания, развития и сравнить по выбранным направлениям (Парадигмы, Concurrency, Sync/Async обработка, система типов и проч.).


          1. OlegZH
            14.09.2026 15:41

            Почему? Мне всегда казалось, что для обучения программированию лучше подходят языки, где имеются простые типы данных и структуры (C и Pascal, например), и вся работа осуществляется с ними явно, без семантических трудностей и особых побочных эффектов.


            1. MountainGoat
              14.09.2026 15:41

              Мне всегда казалось, что для обучения програмированию подходят языки, которые не нужно будет забывать сразу по окончанию обучения. Поэтому JavaScript. Только не в броузере, конечно, а в интерпретаторе с гуём.


          1. OlegZH
            14.09.2026 15:41

            Ссылка очень любопытная. Спасибо.


        1. panzerfaust
          14.09.2026 15:41

          А то, что касается хорошего продукта, то и вправду интересно

          Берете любой крупный известный сервис, тыкаете пальцем в бэкенд, с большой вероятностью попадаете в джаву. Сильно реже в C#, ноду или го.


          1. OlegZH
            14.09.2026 15:41

            А как поживает Rust? Может ли он потеснить своих старших товарищей?


            1. BugM
              14.09.2026 15:41

              Он тихо умирает за ненадобностью.

              Он не настолько лучше плюсов чтобы на него переписывать. На нем нет специалистов чтобы новые проекты делать. И он слишком неудобен чтобы занять нишу неплюсов.


              1. orthoxerox
                14.09.2026 15:41

                Он не умирает, потому что на нём можно заставить писать LLM, у них не болит голова от лайфтаймов.


                1. BugM
                  14.09.2026 15:41

                  А ком к нужен слоп который читать некому? Плюсы опять лучше, специалистов достаточно.


                1. CrashLogger
                  14.09.2026 15:41

                  А зачем ? Ведь Rust придуман чтобы людям было сложнее сделать ошибку. А LLM и на плюсах напишет нормально.


              1. 00Kirill00
                14.09.2026 15:41

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


                1. BugM
                  14.09.2026 15:41

                  Вот это все чаще это какие-то первые проценты. Лучше сразу закопать и писать на плюсах, чем потом переписывать.


          1. 00Kirill00
            14.09.2026 15:41

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


            1. BugM
              14.09.2026 15:41

              Смените работу. Это у вас совсем ужас. Нормальных джава систем гораздо больше.


        1. alan008
          14.09.2026 15:41

          Java'у в банках и прочем финтехе используют, чем тут хвастяться )


          1. OlegZH
            14.09.2026 15:41

            Всё-равно, интересно!

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


            1. JediPhilosopher
              14.09.2026 15:41

              Язык сам по себе дает мало. много дает обвязка. Библиотеки, фреймворки, тулы, коммьюнити.

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

              Питон - стал языком науки, и очень много научного софта и библиотек под него.

              Плюсы и шарп теперь языки геймдева.

              Да, никто не мешает начать писать веб-сервис на С++, а игру на Java. Но тогда придется столкнуться со сложностями на ровном месте: маленький выбор фреймворков и инструментов, много чего устарело и не поддерживается, а замены ему нет, сложнее найти людей с релевантным опытом.

              А так-то в целом все языки могут примерно одно и то же. Точность цифр обеспечивается без проблем в любом популярном ЯП - либо через цифры с фиксированной точкой, либо через BigDecimal и подобные классы, которые везде есть уже давно.


    1. AndrejSinyavin
      14.09.2026 15:41

      Можно OpenIDE, меньше геморроя с квнами… Только зачем оно вам вообще надо? Порог вхождения - высокий, синтаксис по нынешним меркам - многословен и архаичен, без всяких спрингов - смысла нету что-то пытаться… кроме энтерпрайза поди нигде уже не используется. Вам свой бэкенд хочется запилить под свои нужды? Или просто попробовать кодинг? Тогда лучше с джавы не начинать, разочаруетесь.


      1. neiromand
        14.09.2026 15:41

        >Тогда лучше с джавы не начинать, разочаруетесь.

        начинал с c#, ушёл в java и уже 12 лет что-то не могу разочароваться, сколько ещё ждать?

        >кроме энтерпрайза поди нигде уже не используется

        потрясающий кругозор


      1. OlegZH
        14.09.2026 15:41

        Только зачем оно вам вообще надо? 

        Если есть возможность узнать что-то новое, то надо обязательно узнать что-то новое. Нельзя, конечно, знать всё. Нужно знать главное. Самообразование тоже никто не отменял.

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

        Ну, это общая тенденция. Гигантомахия сейчас касается и Java, и C++ и C#. Слишком много вариантов использования. Слишком много библиотек. Слишком много инструментов.

        А что значит, "архаичный"? Какой смысл в упоминании "архаичности"? А что C#? он менее "архаичен"? И почему же? Потому, что в него однажды занесли LINQ?

        без всяких спрингов - смысла нету что-то пытаться…

        Чем плохо простое консольное приложение?

        кроме энтерпрайза поди нигде уже не используется.

        Не понял. А что находится вне "энтерпрайза"? Можно ли, например, представить графический редактор или тот же аналог MATLAB на Java?

        ... разочаруетесь.

        Разочароваться можно в себе, в программировании (как таковом)... Язык — это инструмент. Ты, либо умеешь им пользоваться, либо не умеешь. Большая часть языков взаимозаменяемы. (Всё сводится, в итоге, к машине Тьюринга, не так ли?!?) Вопрос синтаксиса, удобства использования инструментов и инфраструктура. И Java, и C# — это языки с развитой инфраструктурой. По моему, одного этого достаточно, чтобы изучить их, и сделать это достаточно глубоко. И, кстати, хорошо бы изучать их вместе, ибо на различиях многое, как я предполагаю, познать можно будет.


      1. geher
        14.09.2026 15:41

        кроме энтерпрайза поди нигде уже не используется.

        Есть такой страшный зверь Protegè (не уверен в правильности расстановки закорючек над e). Писано на чистом java. Программа для составления онтологий. Многие из тех, кто онтооогиями занимаются, считают ее лучшим средством (хотя у них свои холливары на эту тему).

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

        Если забраться на github, то тоже java будет присутствовать если не в изобилии, то во все же достаточно большом количестве.

        Часто встречаю приложения для простых смертных пользователей, которые (приложения) очень хотят наличия в системе java определенной версии, что намекает на наличие под капотом этой самой вашей java. А некоторые и запускаются скриптом, в котором явно виден запуск java.


    1. KReal
      14.09.2026 15:41

      Отвечает дотнетчик по пунктам 6 и 7:


      6. jetBrains IDEA

      7. jetBrains IDEA (и все прочие). Kafka


      1. OlegZH
        14.09.2026 15:41

        В доступе? Раньше IDEA была платной.


        1. MajorMotokoKusanagi
          14.09.2026 15:41

          Комьюнити версия с соответствующими лицензионными ограничениями доступна.

          А так - наши OpenIDE, GIGA IDE, Amplicode - есть и комьюнити лицензии, и коммерческие.


          1. OlegZH
            14.09.2026 15:41

            Ясно. Спасибо.


  1. 00Kirill00
    14.09.2026 15:41

    Удаление флага -noverify давно напрашивалось. В старых докерфайлах его держали по инерции со времен Java 8, хотя реального ускорения старта он уже сто лет не давал...