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)

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

всегда хочу подучиться.

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

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

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

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

Средняя стоимомть моего «хелловорлда» - 3000-5000 евро

Это очень мало.

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

Критерий успешности, как в РФ, так и EU и странах Северной Америки - это собственный дом и новая машина типа E или F класса.

Критерий успешности как в северной Корее, так и в EU и странах Северной Америки являются не одна, а две плошки риса в день (с). Мечты простого жителя СК.

Остальные «глубокомысленные» рассуждения папуаса из северного Бутово я просто поскипал. Но если хочется подтверждения словам Маркса о том, что бытие определяет сознание, то вот он, подходящий экземпляр, со всеми происходящими из его убогого бытия комплексами. Так что можешь перестать писать свои заполненные шизофазией простыни, первый энтерпрайZe жабакодер всея Руси. Интерес они могут представлять только для твоего психотерапевта. Лучше найди тазик с водой и опусти в него свою раскалившуюся нижнюю часть туловища.

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

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

возможно проблема в скала реализации

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

Куда Оракл так спешит. Или это Гугл так тормозит.

Гугл не умеет Java.

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

возможно проблема в скала реализации

так где это сделано хорошо?

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

Я не думаю что это косяк языка. Что-то серьезное так и так должно делаться на уровне аннотированного AST. Даже в чистом си благодаря internal linkage и weak symbols простые grep/sed могут налажать. А если поставить задачу «найти все преобразования float в double»?

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

С++ должен разорвать замкнутый круг совместимости с самим собой, чтобы побороть свои детские болезни, ставшие хроничесаими.(этого похоже никогда не произойдёт)

Судя по выступлениям Саттера, к чему-то подобному хотят прийти.

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

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

Скажи это Вирту.

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

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

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

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

Скажи это Вирту.

во первых, Вирт - это мнение человека.

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

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

Поттреринга это конечно не касатся, она сразу в продакшен.

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

Данному критерию из наемных работников в сфере IT могут удовлетворять только
1. менеджеры выше среднего звена.
2. тим-лиды и системные архитекторы, работающие с Java-технологиями.

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

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

Функции - объекты первого класса
Инвариантные массивы

А вам это зачем?

Отсутствие статиков в пользу объектов-компаньонов

Какая-то вкусовщина.

Краткость и отсутствие избыточности кода

Это может решить IDE, для этого не нужно всё ломать.

Null-safety

Есть Optional и в целом это не такая серьёзная проблема, ради которой всё нужно ломать. Опять же решаемо на уровне IDE.

Все стейтменты, а не только switch - это выражения, возвращающие значения

Опять вкусовщина.

Все есть объект

В джаве так всё и сделано, но как показала практика это хреновый подход в плане перформанса. Поэтому пилят Value Type.

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

Пусть на Жабе кодят наемные рабы

Так-то вы понимаете, что сейчас много людей обидели? На джаве разрабатываются современные СУБД, IDE и прочие полезные вещи. Джава это не Spring и Hibernate, попробуйте расширить свои границы видения мира.

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

В джаве так всё и сделано, но как показала практика это хреновый подход в плане перформанса. Поэтому пилят Value Type.

boolean , byte , char , short , int , long , float, double - классы?

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

А если поставить задачу «найти все преобразования float в double»?

Вот вот. Неявное преобразование типов, перегрузка операторов, перегрузка функций, вот это вот всё.

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

Все эти гуёвые прибамбаксы не помогают мне обрабатывать код с помощью grep/sed.

Идеально было бы иметь следующее - первым этапом я прогоняю код своего проекта через препроцессор, который «разворачивает» неявности, например a+b, заменяет на __add_int(a, __float_to_int(b)). Затем я делаю рефакторинг этого кода и третьим шагом, с помощью «обратного препроцессора» сворачиваю код назад в «неявный» С++ код.

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

А вам это зачем?

Чтобы передавать функции как аргументы в различные методы. Очень удобно и помогает сокращать код

Есть Optional и в целом это не такая серьёзная проблема, ради которой всё нужно ломать. Опять же решаемо на уровне IDE.

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

В джаве так всё и сделано, но как показала практика это хреновый подход в плане перформанса. Поэтому пилят Value Type.

Примитивные типы, такие как int - уже объектами стали? :) Value Types - это такие-же объекты на уровне языка, просто ненаследуемые и размещаются на стеке, вместо кучи. Передются по значению, как примитивы. Также как и структуры в дотнете.

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

Class<int> foo = int.class;

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

List<int> foo = new ArrayList<int>();
foo.remove() // <- index or element?

Хотя как по мне - пусть ломают. Зато будут нормальные дженерики, вместо type erasure.

FilosofeM ★★
()
Последнее исправление: FilosofeM (всего исправлений: 1)
Ответ на: комментарий от Lancelot
void foo(List<Integer> bar);
void foo(List<BigDecimal> bar);

Выдаст ошибку компиляции, ибо после стирания типов полчим два одинаковых метода:

void foo(List bar);
void foo(List bar);

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

странное у вас доказательство. void тоже класс тогда?

class Foo extends int{ }

возвращает

Error:(3, 19) java: unexpected type required: class found: int

Без обид, но компилятору я больше верю

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

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

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

void тоже класс тогда?

Да

Class<Void> foo = void.class;

странное у вас доказательство.

Кто бы говорил: class Foo extends int{ }

Зачем вы приводите синтетику? Или вы реально бы использовали этот юзкейс?

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

Если взять Haskell, где очевидно, что с типами всё лучше, то там вообще они не нужно во время выполнения, только во время компиляции

Это, мягко говоря, не так.

В haskell можно динамически приводить типы как в каком-нибудь питоне. Можно даже по сети передать нечто, а потом на удаленном узле проверить нужный тип. Не помню, как это точно называется, но в haskell есть подобный механизм, и он используется, к примеру, в distributed-process.

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

движки есть как минимум у Google, Apple, Microsoft и Mozilla.

А в реале есть единственный движок Chromium, и рано или поздно остальные отсохнут. Microsoft уже отсох и пересел на Chromium. Вот и vendor lock-in в чистом виде, только вместо кучи JVM от Sun/Oracle/IBM останется одна V8 VM, косая потому что пишется индусами через бангалор

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

Или вы реально бы использовали этот юзкейс?

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

Давай еще рас: компилятор говорит что int это не final class, а вообще не class. А то что «The primitive Java types (boolean, byte, char, short, int, long, float, and double), and the keyword void are also represented as Class objects», не значит что это классы.

Но в целом я на яве не пишу, и мне все равно, просто спросил.

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

Если бы JVM изначально была пригодной и использовалась бы в качестве VM JavaScript в браузерах, апплеты были бы живы до сих пор.

Пригодной скорее всего она была всегда, но вот Microsoft не терпелось создать свою ни с чем несовместимую Java. В результате Sun сдулась со временем, а google под флагом NIH стал создавать свою Java ME, и корячится уже 10 лет. Проги нужно писать минимум 4 раза: под Apple iOS, Microsoft Windows, Google Android и MS WinMobile10 или как она там называется. Вместо того чтобы 1 раз и запустить везде благо устройства на ладони мощнее чем десктопы 2003года

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

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

демагогия

не значит что это классы

Так тебе английским языком же написано: «also represented as Class objects», но нет, интересная у тебя позиция. Ладно, понятно, тебе шашечки, а не ехать.

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

also represented as Class objects

represented as

это же ява, тут вам не duck typing. Да и если оно крякает, но не плавает, это все еще не утка.

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

В каком ещё “реале”? Edge использует собственный движок (не говоря о том, что IE11 до сих пор довольно широко используется). У apple своя версия webkit, не имеющая никакого отношения к Chromium. Про мозиллу и говорить нечего, никакого хромиума там никогда не было и не будет. Заканчивайте разводить жопоголизм и панику на пустом месте.

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

Причём тут вообще Microsoft? JavaScript был придуман в Mozilla и впервые был реализован в Netscape Navigator 2.0 в 1995 году. Почему VM JavaScript - не JVM или вскоре не стала JVM, хотя слово Java уже присутствует в названии языка? Обрати внимание, что проиграли не только апплеты, но и Flash - то есть ещё один дополнительный VM под браузеры. То же самое и с .NET

Sun упустил возможность, а теперь JavaScript не потеснить.

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

северного Бутово

Так Северного БутовА, или Южного?

А то в ДС ещё много районов.

Конечно, понимаю, что в ДС Вы были бы просто понаехалом, слабо ориентирующимся в нашем городе, однако, обоснуйте Вашу телепатию.

---

Причем тут КНДР?

Вы хотите сказать, что Вы, подобно жителю КНДР или трудовому мигранту в ДС, пешком на работу бегаете?

Охотно верю.

Пешком, зато с айфончегом.

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

Чтобы передавать функции как аргументы в различные методы. Очень удобно и помогает сокращать код

Уже давно сделали, вы отстали от жизни

class A {

  public String hello() {
      return "hello, world!";
  }

}

...

public void b(Supplier<String> supplier) {
    String text = supplier.get();
    System.out.println(text);
}
...
A a = new A();
b(a::hello); // hello, world!
Gubtor
()
Ответ на: комментарий от anonymous

WPF тоже не просто так забросили

Я в этом не компетентен, но что-то верится с трудом.

Может ссылочкой кто поделится, что «WPF забросили»?

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

А зачем к C# приближаться?

Чтобы быть удобнее.

А то у меня текущий клиент жабу потребляет, так после C# уж очень убого, и многословно.

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

Так оракл наехал на гугл, а гугл остался виноватым?

С точеи зрения Оракл-фанов - это просто ечевидно.

Даже если арументы придуманы на месте, ведь платить будут за Жаба API а не за неполную реализацию Жабы.

Но когда это фанатиков останавливало?

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

Перегрузки операторов не будет потому, что не нужна в Java.

Дадада
Как и var, нормальные дженерики, лямбды и многое другое ;)

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

Наберите в вашем любимом поисковике WinRT UWP, пожалуйста. Если не знаете английский, присылайте ссылку, переведу пару предложений...)))

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

А с точки зрения гугл-фанбоев всё наоборот конечно же.

Но когда это фанатиков останавливало?

действительно, когда это тебя останавливало.

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

Groovy для этого нужен.

Как язык программирования, на котором сначала Опробуются различные синтаксические конструкции.

А потом удачные конструкции Апробируются в Java.

Для банковского софта вполне хватает Java и только Java.

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

С детьми мы развлекаемся, программируя на Python'e.

И какое счастье, что full stack на работе у нас уже только для legacy приложений.

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