LINUX.ORG.RU

Первый релиз Java 11

 , , ,


1

3

Сегодня состоялся первый релиз Java 11. Это первая LTS (Long Time Support) версия Java, после изменения политики выпуска новых версий начиная с Java 9. Публичные обновления Java 11 будут выпускаться до сентября 2023 года.

В JDK 11 внесены следующие изменения:

  1. Стек развёртывания апплетов и WebStart-приложений, объявленный устаревшим в Java 9, теперь удалён окончательно. Вместе с удалением стека развёртывания исчез список поддерживаемых браузеров.
  2. Удалено автоматическое обновление JRE и сам JRE для Windows и MacOS.
  3. Вместо JRE и Server JRE предлагается использовать утилиту jlink для создания меньших кастомных рантаймов.
  4. JavaFX более не является частью JDK, а поставляется отдельно из openjfx.io.
  5. Java Mission Control, поставлявшийся вместе с JDK 7, 8, 9, 10 также перестал быть частью JDK и поставляется отдельно. ]*] Формат обновлений для Windows переведён с tar.gz на zip, как на более часто используемый в этой операционной системе.
  6. Формат обновлений для MacOS переведён с .app на .dmg, как на более соответствующий стандартам этой операционной системы.

Изменения в JDK:

  1. JEP 327 Unicode 10 включая 16018 новых символов среди которых:
    а. 19 новых символов для 4K TV стандарта
    б. символ Биткоина
    в. 128 эмоджи-символов
    г. 10 новых алфавитов, среди которых: албанский, брахманский (11-го века) и прочая экзотика.
    д. 18 новых блоков символов для новых и существующих алфавитов, среди которых Cyrillic Extended-C.
  2. JEP 321 HTTP Client (Standard) стандартизирован и переведён из jdk.incubator.http в java.net.http.
  3. В интерфейс Collection добавлен toArray(IntFunction<T[]>) Default Method, перегружающий toArray(T[]). Это привело к несовместимости со старым кодом, в котором есть вызов toArray(null). Теперь такой вызов приводит к ошибке компиляции и должен быть изменён на аналогичный с переводом null в требуемый тип.
  4. Обновлены локали для Unicode CLDR v33
  5. Добавлена возможность ленивого создания потоков компиляции. Включается опцией -XX:+UseDynamicNumberOfCompilerThreads.
  6. Добавлен новый экспериментальный Scalable Low-Latency Garbage Collector, известный под именами Z и ZGC. Включается одновременным использованием опций -XX:+UnlockExperimentalVMOptions и -XX:+UseZGC.
  7. JEP 318 Epsilon, A No-Op Garbage Collector новый ничего не освобождающий сборщик мусора, предназначенный для тестирования.
  8. JEP 331 Low-Overhead Heap Profiling - поддержка низкозатратного профилирования выделения памяти в куче. Доступно через JVMTI.
  9. JEP 329 ChaCha20 and Poly1305 Cryptographic Algorithms.
  10. Системные свойства java.home, user.home, user.dir и user.name теперь неизменяемы

И ещё много других изменений. Также можно упомянуть удаление поддержки CORBA и мониторинга JVM через SNMP. Из JDK удалены модули, связанные с Java EE. По умолчанию используется не GTK2, а GTK3. Расширено использование нового ключевого слова var, которое теперь может использоваться при объявлении параметров лямбд. При этом все параметры таких лямбд обязаны быть var. Удалены фонты Lucida. Плагин javax.imageio больше не поддерживает JPEG с альфа каналом, судя по всему из-за проприетарности старой реализации.

JDK 11 можно скачать тут. Также следует обратить внимание на то, что изменена лицензия Oracle JDK. Теперь она GPL+CE, как и у OpenJDK.

Для переходящих на Java 11 LTS с Java 8 такой переход добавит ещё и массу новшеств Java 9 и Java 10, перечислять которые тут излишне.

>>> Подробности

★★★★★

Проверено: leave ()
Последнее исправление: cetjs2 (всего исправлений: 16)

Ответ на: комментарий от Partisan

Поэтому исключили перегрузку операторов как ненадёжный элемент - из-за неё программный код был был бы менее читаемым(поскольку для понимания его смысла надо смотреть участок программы с определением перезагрузки...

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

a->add(b->sub(c->mult(d)))

Явное же противоречие.

А если вы отказываетесь программировать на Java пока в него не завезут перегрузку операторов, то это и хорошо, потому что плохих программистов в Java и так хватает.

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

EvilSpirit
()
Ответ на: комментарий от EvilSpirit

В IDEA есть преобразователь методов в операторы. Например, для BigInteger и других классов из JDK это работает точно. Т.е. можешь спокойно писать операторы, а она методы сама подставит. А видеть будешь только операторы.

Вообще, в 21 веке можно не париться из-за синтаксиса, таже IDEA сделает как тебе больше нравится. Я, так вообще задумывал IDE, которая полностью скроет многословные модификаторы графическими иконками. Когда ты в режиме чтения кода.

foror ★★★★★
()

Напишите, что Oracle JDK стала проприетарной и платной, на халяву надо использовать Open JDK.

Legioner ★★★★★
()
Ответ на: комментарий от FilosofeM

А зачем вообще вызывать toArray(null)? Тем более что это выкинет исключение.

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

Legioner ★★★★★
()
Последнее исправление: Legioner (всего исправлений: 1)

Удалены фонты Lucida

qaqa ★★
()
Ответ на: комментарий от EvilSpirit

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

Да, но у меня лично (а также у прочих адептов) не щелкает в голове переходить к определению оператора «+»

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

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

Вот откуда только такие джеданутые на всю голову вечно берутся?

RedPossum ★★★★★
()
Ответ на: комментарий от RedPossum

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

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

Вот откуда только такие джеданутые на всю голову вечно берутся?

А вот откуда вылезает хамло, с ходу заявляющее об уровне моего владения языкам программирования?

EvilSpirit
()
Ответ на: комментарий от EvilSpirit

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

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

EvilSpirit
()
Ответ на: комментарий от Legioner

Напишите, что Oracle JDK стала проприетарной и платной, на халяву надо использовать Open JDK.

Как будто на линукс-серверах когда-то было иначе.

Deleted
()
Ответ на: комментарий от EvilSpirit

А вот откуда вылезает хамло, с ходу заявляющее об уровне моего владения языкам программирования?

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

Да объясните мне уже, откуда там сложность-то берется?

Далее гипотетический синтаксис:

public class FakeInt{
  private int inner;
  @Override
  public int operator+(FakeInt that){
      return this.inner - that.inner; //happy debugging motherfucker!
  }
}
RedPossum ★★★★★
()
Ответ на: комментарий от EvilSpirit

Ну как же вы смеете спорить с моим примером

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

RedPossum ★★★★★
()
Ответ на: комментарий от Deleted

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

Legioner ★★★★★
()
Ответ на: комментарий от foror

Когда IDE делает преобразование кода при отображении - это и есть доказательство, что фича нужна.

anonymous
()
Ответ на: комментарий от Deleted

Отрицательный опыт. Вечно они там всё перетасуют, что ничего в итоге не работает и ковыряйся там, реверс-инжинирь, чего взбрело в голову этим мейнтейнерам. А папочка с JDK, папочка с tomcat и прописанные переменные окружения в скриптике работают стабильно и вне зависимости от дистрибутива, операционной системы и погоды на Марсе.

Legioner ★★★★★
()
Ответ на: комментарий от foror

У меня не работает. Только что проверил. a + b вводит как есть и подчёркивает как ошибку. a.add(b) ни во что не преобразовывает. Или это где-то в настройках включается?

Legioner ★★★★★
()
Последнее исправление: Legioner (всего исправлений: 2)
Ответ на: комментарий от Partisan

Какая незамутненность, как будто методичку от оракла читаешь. Держу пари, раньше там был написано:

лямбды не нужны, поскольку авторы Java стремились к повышению надёжности программ, которая особенно важна для серверных приложений

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

anonymous
()
Ответ на: комментарий от Legioner

Странно. Никогда не замечал ничего подобного за много лет шатания явы на серверах.

работают стабильно и вне зависимости от дистрибутива

А как же обновления? Ничего не ломают?

Deleted
()
Ответ на: комментарий от env

Вместо апплетов теперь браузерные API, а JavaFX дожевывает кусочек легаси с Adobe Flash и Silverlight.

Но ведь ничто не мешает разрабатывать гуевые приложения на JavaFX? Поддержка современных языковых средств, таких как enum, стильный-модный-молодежный лук, всякие графики. Чего она не взлетает?

popov-aa
()
Ответ на: комментарий от Deleted

А как же обновления? Ничего не ломают?

А что им ломать, у джавы с совместимостью даже между мажорными версиями почти всегда всё идеально.

Legioner ★★★★★
()
Ответ на: комментарий от Legioner

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

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

Лучи ненависти Ларри.

stave ★★★★★
()
Ответ на: комментарий от Partisan

Поэтому исключили перегрузку операторов как ненадёжный элемент - из-за неё программный код был был бы менее читаемым(поскольку для понимания его смысла надо смотреть участок программы с определением перезагрузки...

Конечно, так как это сделано в С++, это диверсия. Рефакторинг кода с перезагрузкой операторов это боль. Определить, какая именно перезагрузка используется в данном случае - трудоёмкая операция. Гарантировано найти именно те места, где используется данный оператор для данного типа - вообще невозможно.

Но если учесть ошибки С++ и сделать перезагрузку сделать по уму, то это было бы круто.

sena ★★
()
Ответ на: комментарий от bbk123

её выкупила какая-то компания, специализирующаяся на поддержке legacy

«Какая-то компания» IDERA жива и набирает персонал -

https://www.idera.com/about/careers

Legacy и не только legacy.

Зато окучивают правительственные структуры США.

Для mid-size задач они заняли свою нишу -

https://ru.wikipedia.org/wiki/Idera_Software

Так же слышал, что он потерял свою былую популярность.

Не потерял -

https://vaadin.com/success-stories

Мне как-то «посчастливилось» поддерживать один такой проект.

Гвит намного проще, чем Spring MVC или Apache Wicket.

Хотя, Wicket, всё-таки тоже неплох, хотя и на любителя.

Сейчас, правда, тенденция такова, что меня переключили только на backend, а frontend должны создавать молодые креативные специалисты по JS.

PS. GXT 3.1.1 я для своих legacy «форкнул» как внутренний проект, добавив свои модули. В принципе, для средних и небольших проектов GXT вполне пригоден.

Bioreactor ★★★★★
()
Ответ на: комментарий от EvilSpirit

Это уже у Вас на собеседовании спросят.

class ArraysAdd {
    public static Collection plus(Collection a, Collection b){
        [a, b].transpose().collect { x, y -> x + y }
    }
}

use (ArraysAdd) {
   System.out.println ([10, 20] + [1, 2])
}
$ groovy ADemo.groovy
[11, 22]

$

Groovy - основной скриптовый язычок для Spring - без него сейчас никак.

Bioreactor ★★★★★
()
Ответ на: комментарий от Partisan

Поэтому исключили перегрузку операторов как ненадёжный элемент - из-за неё программный код был был бы менее читаемым(

Может это конечно всё и правда, но они помнится и вариантность из generics исключили — сознательно, для простоты (читай - для понижения порога вхождения). А получилась херня, когда приходится в коде писать вперемешку <T> и <? extends T> (причём одно к другому не приводится), плюс иметь идиотские варнинги про f(List<T>... tt). Сами себя обманули. В общем, я бы не стал апеллировать к намерениям авторов жавы как к окончательному аргументу. Хорошо хоть в скале сделали нормально, без этого корявого упрощенчества.

поскольку для понимания его смысла надо смотреть участок программы с определением перезагрузки...

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

dimgel ★★★★★
()

Удалено автоматическое обновление JRE и сам JRE для Windows и MacOS.

А даже хорошо, ибо то, что было — позорище в лучших традициях malware и васян-сборок.

KennyMinigun ★★★★★
()
Ответ на: комментарий от Bioreactor

LOL, а в плюсах (казалось где бы еще!) нет в стандартной библиотеке оператора + для коллекций (в std::valarray он есть, но имеет несколько другую семантику).

Но жирнобуст как всегда в помощь: http://www.boost.org/libs/assign/

KennyMinigun ★★★★★
()
Ответ на: комментарий от KennyMinigun

boost::assign это про инициализацию контейнеров. В современном с++ это делается так (без всякого boost):


std::vector<int> v = {1,2,3,4,5};

cawa
()
Ответ на: комментарий от cawa

boost::assign это про инициализацию контейнеров

Я об операторе +=: https://wandbox.org/permlink/Ghdy2YPPuupyNbk3

UPD Хотя он тоже не умеет конкатенировать векторы...

KennyMinigun ★★★★★
()
Последнее исправление: KennyMinigun (всего исправлений: 1)
Ответ на: комментарий от stevejobs

Jvm и java как язык это две разные вещи. С какой стати гуглу кормить этих дармоедов? Ты еще упрекни что в мозилле сплошные злодеи, ведь они c# и .net не двигают. Вот злодеи то!

anonymous
()
Ответ на: комментарий от KennyMinigun

сняли с языка

К тому же не совсем очевидно почему += должен конкатенировать а не складывать поэлементно, как это принято в математике.

cawa
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.