Статьи

5 функций в Java 9, которые изменят способ разработки программного обеспечения (и 2, которые не будут)

Какие самые интересные функции ожидаются в Java 9?

Не отвлекайтесь на относительную тишину в последнее время вокруг Java 9. Коммиттеры JDK усердно работают над подготовкой следующего релиза, который, как ожидается, завершит работу всего через несколько месяцев в декабре 2015 года. После этого он пройдет тщательные тесты и исправлены ошибки, готовившие их к общедоступной версии, которая запланирована на сентябрь 2016 года .

Сегодня у нас есть довольно четкое представление о возможностях, которые мы можем ожидать в Java 9. Если Java 8 можно охарактеризовать как основной выпуск лямбд, потоков и изменений API, то Java 9 — это все о Jigsaw , дополнительных утилитах и ​​изменениях под капотом. , В этом посте мы собрали некоторые из функций, которые, по нашему мнению, являются наиболее интересными для Java 9. Помимо обычного подозрительного проекта Jigsaw, который взял на себя задачу разрушения JRE и внесения модульности в основные компоненты Java. ,

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

1. Java + REPL = jshell

Да. Раньше у нас были сомнения, что проект Kulla успеет к Java 9, но теперь он официальный. В следующем выпуске Java появится новый инструмент командной строки под названием jshell, который добавит встроенную поддержку и популяризирует способ Java в REPL (Read-Eval-Print-Loop). То есть, скажем, если вы захотите запустить несколько строк Java самостоятельно, вам не нужно будет оборачивать все это в отдельный проект или метод. Да и точки с запятой — про них можно забыть

1
2
3
-> 2 + 2
| Expression value is: 4
|     assigned to temporary variable $1 of type int

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

2. Наступают микробенчмарки

Java Microbenchmarking Harness ( JMH ) Алексея Шипилева делает следующий шаг в своем развитии и присоединяется к Java в качестве официального решения для тестирования производительности . Нам очень нравится проводить тесты здесь, в Такипи, поэтому мы с нетерпением ждем стандартизированного способа их проведения.

JMH — это система Java для сборки, запуска и анализа нано / микро / милли / макро тестов. Когда дело доходит до точного бенчмаркинга, в игре есть такие силы, как время прогрева и оптимизации, которые могут оказать большое влияние на результаты. Особенно, когда вы переходите к микро и нано секундам. Поэтому сегодня JMH — ваш лучший выбор, если вы хотите получить наиболее точные результаты, которые помогут вам принять правильное решение в соответствии с вашими критериями — и теперь он становится синонимом Java 9.

3. Будет ли G1 новым сборщиком мусора по умолчанию?

Мы часто слышим заблуждение, что у Java есть только один сборщик мусора, хотя на самом деле его 4 . В Java 9 есть действующее предложение, которое все еще находится в стадии обсуждения, чтобы заменить сборщик мусора по умолчанию (сборщик параллельной / сквозной передачи) на G1, который был представлен в Java 7. Для краткого обзора различий между различными сборщиками вы можете проверить из этого поста прямо здесь .

Как правило, G1 был разработан для лучшей поддержки кучи размером более 4 ГБ и, как известно, вызывает менее частые паузы GC, но когда наступает пауза, она имеет тенденцию быть более длинной. Недавно мы обсудили все вопросы GC с Хаимом Ядидом, руководителем отдела производительности в Outbrain, чтобы помочь вам узнать больше о различных компромиссах между коллекционерами . Кроме того, если вы хотите получить представление об этой дискуссии изнутри, списки рассылки hotspot-dev и jdk9-dev — отличное место для начала.

4. HTTP 2.0 — это будущее

Официальный HTTP 2.0 RFC был одобрен всего несколько месяцев назад, основываясь на алгоритме Google SPDY. SPDY уже продемонстрировал значительные улучшения скорости по сравнению с HTTP 1.1 в диапазоне от 11,81% до 47,7%, и его реализация уже существует в большинстве современных браузеров.

Java 9 будет иметь полную поддержку HTTP 2.0 и функцию нового клиента HTTP для Java, который заменит HttpURLConnection, а также реализует HTTP 2.0 и веб-сокеты.

5. API процесса только что получил огромный импульс

До сих пор была ограниченная способность контролировать и управлять процессами операционной системы с Java. Например, чтобы сделать что-то столь же простое, как получить PID процесса в более ранних версиях Java, вам нужно либо получить доступ к собственному коду, либо использовать какой-то магический обходной путь. Более того, для каждой платформы потребуется разная реализация, чтобы гарантировать, что вы получите правильный результат.

В Java 9 ожидается код для получения PID Linux, который теперь выглядит следующим образом:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
public static void main(String[] args) throws Exception
{
    Process proc = Runtime.getRuntime().exec(new String[]{ "/bin/sh", "-c", "echo $PPID" });
 
    if (proc.waitFor() == 0)
    {
        InputStream in = proc.getInputStream();
        int available = in.available();
        byte[] outputBytes = new byte[available];
 
        in.read(outputBytes);
        String pid = new String(outputBytes);
 
        System.out.println("Your pid is " + pid);
     }
}

Чтобы превратиться во что-то вроде этого (которое также поддерживает все операционные системы):

System.out.println («Ваш pid есть» + Process.getCurrentPid ());

Обновление расширит возможности Java по взаимодействию с операционной системой: новые прямые методы для обработки PID, имен и состояний процессов, а также возможность перечисления JVM и процессов и многое другое.

Что вы не увидите в Java 9?

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

1. Стандартизированный легкий JSON API

В опросе, который мы провели с 350 разработчиками , API-интерфейс JSON был так же популярен, как и Jigsaw, но, похоже, его не удалось сократить из-за проблем с финансированием. Марк Рейнхольд , главный архитектор платформы Java, в списке рассылки JDK 9:

«Этот JEP был бы полезным дополнением к платформе, но, по большому счету, он не так важен, как другие функции, которые Oracle финансирует или рассматривает финансирование для JDK 9. Мы можем пересмотреть этот JEP для JDK 10 или более поздний выпуск. »

2. Деньги и валюта API

Из других новостей также похоже, что ожидаемому API Money и Currency также не хватает поддержки Oracle. Вот ответ, который мы получили от Анатоля Треша , ведущего специалиста по API: