Обзор нововведений в Java 7

    В недавнем релизе Java появилось немало вещей, на которые стоит обратить внимание. Конечно же, все мы были огорчены переносом Project Lambda и некоторых прочих вкусняшек в JDK8, но тем не менее, и этот релиз привнёс что-то полезное в арсенал java-разработчика. Под катом можно найти более детальный обзор новшеств. По наиболее интересным из них, скорее всего, будут написаны дополнительные статьи с примерами использования.

    Виртуальная машина


    InvokeDynamic


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

    Строгая проверка бинарных класс-файлов


    В Java 7 ввели новый верификатор, получивший название «проверяющего типы» (typechecking verifier), который работает несколько быстрее и поддерживает новые языковые фичи. Этот верификатор обязательно будет использоваться для бинарников версии 51 и более, то есть >= SE7.

    Синтаксический сахар

    Про Project Coin уже писали много, в том числе и на хабре, поэтому в дальнейшем представлении он, полагаю, не нуждается. Впрочем, вы всегда можете исправить моё заблуждение в комментариях :) Стоит только отметить, что coin разбили на две части, и наиболее трепетно ожидаемая, содержащая приятности вроде упрощённого создания коллекций, в SE 7 не войдёт.

    Изменения в ядре


    Обновление архитектуры classloader'а


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

    Метод close для URLClassLoader


    Тут особо и говорить нечего: теперь можно освободить ресурсы, которые держит classloader. Подробнее тут.

    Обновления для java.util.concurrent и коллекций


    Новый релиз предоставляет множество новых полезных библиотек для многопоточных приложений. Об одной из них, Phaser, уже писали на хабре. Помимо него включены легковесный fork/join(UPD: статья с описанием) и ещё некоторые барьеры, concurrent-версии деков на связных списках и thread-local генератор случайных чисел. Более подробное ожидание ожидается в отдельной статье.

    Интернационализация


    Unicode 6.0


    Теперь последняя поддерживаемая версия Unicode стала 6.0.

    Улучшение java.util.Locale


    Теперь этот класс поддерживает IETF BCP 47(Метки для определения языков)и UTR 35(локализованную языковую разметку зыков)

    Разделены локаль пользователя и локаль графического интерфейса


    Теперь форматирование текста и отображение чего-либо на экране имеют независимые локали. Подробнее можно посмотреть в обновлённом javadoc.

    Ввод-вывод и работа с сетью


    NIO.2


    Тоже не нуждающийся в особом представлении новый API для доступа к файловой системе, масштабироемого асинхронного IO-взаимодействия, полноценной работы с zip/jar архивами как с файловой системой и прочего. Все нововведения имеет смысл вынести в отдельный топик. Ознакомиться с официальной документацией можно тут.

    Поддержка стандартов


    Добавлена поддержка SCTP для Solaris, SDP для поддержки InfitiBand на Linux и Solaris, поддержка появившегося в Windows Vista стека IPv6 и поддержка TLS 1.2

    Безопасность и шифрование

    Теперь доступны из коробки стандартные алгоритмы эллиптических кривых. Правда, в официальном релизе не дали указаний относительно того, где их найти. Поверхностный поиск по javax.crypto результатов не дал.

    Базы данных

    JDBC обновлён до 4.1, Rowset до версии 1.1. Подробнее можно почитать в документации: java.sql и javax.sql.rowset.

    Клиентская часть


    Конвейер XRender для Java2D


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

    Введение API для новых графических возможностей


    В java 6u10 появилась поддержка новых фич вроде полупрозрачных окошек и окошек поизвольный формы, ровно как и смешивание тяжеловесной и легковесной графики. Теперь для этого появился API. Подробнее можно почитать в документации, и вполне возможно, что скоро на эту тему появится пост.

    Новый look-and-feel


    Добавлен новый look-and-feel. Как утверждают разработчики, он относится к новому поколению, но лично меня не впечатлило. Хотя, конечно, это всяко лучше, чем то, что было раньше. Скриншоты есть здесь.

    Новый декаратор JXLayer


    Про него не найти особо подробной информации, есть ссылка на официальный проект.

    Новый синтезатор звука


    На замену старому проприетарному синтезатору пришэл новый, под названием Gervill. Разработчики его хвалят, но я ничего на этот счёт сказать не могу.

    Web

    Обновлён стек XML, теперь используются версии JAXP 1.4, JAXB 2.2a, and JAX-WS 2.2.

    Управление

    MBean-ы теперь могут сообщать о загрузке процессора как всей системы, так и JVM и умеют отправлять уведомления, когда происходит сборка мусора.

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

    Комментарии 49

      +26
      Заголовок статьи «Детальный обзор» расходится с весьма поверхностным содержанием, не считаете?
        +1
        Возможно. Я при именовании руководствовался тем, что по отдельным темам вскоре появятся ссылки на ещё более детальные обзоры. Во всяком случае, тут более детально, чем говорится обычно. Но если вы придумаете более точное название, я им с радостью воспользуюсь.
          +6
          Хм, можно же просто убрать слово «детальный»! Так и сделаю.
        +2
        Кстати на счет InvokeDynamic (последние новости с JVM Language Summit): оно уже во все используется разработчиками JRuby, Jython и других языков. И кстати, пока что InvokeDynamic проигрывает в производительности «самодельным» реализациям динамических вызовов.
          0
          Было бы здорово, если бы вы поделились ссылками на их работы относительно того, как они пользуются сабжем :)
            +1
            Я там сам конечно не был, коллега рассказывал. Слайды можно найти здесь: www.wiki.jvmlangsummit.com/Main_Page
              +1
              насколько я понял из слайдов в Jython с помощью пары экспериментальных оптимизаций получили ускорение 4-10 раз на синтетических тестах и до 4% ускорения в целом, так что все еще впереди…
                0
                Мои слова — это суммированный итог, который вынес мой коллега после поездки на этот саммит. Oracle-инженеры ответили на это, что мол типа это еще только начало, дальше уже будет работа над производительностью.
          0
          Я возможно буду банален, но меня интересует как там с производительностью, возросла?
          Какие-нибудь цифры, графики есть jdk6 vs jdk7
            +1
            Производительность растёт с каждым апдейтом, а не с каждым мажорным релизом. Но performance-инженеры на JDK7 Launch Party говорили, что производительность в седьмой ещё более возросла.
            0
            Nimbus уже давно есть. Название статьи по ссылке на это намекает )
              +1
              Он был, но в проприетарных сановских пакетах, теперь его перенесли в javax и он официально стал частью JDK. Возможно он даже стал дефолтным вместо Metal, но это в этом я не уверен.
                0
                Не совсем уверен, что вас правильно понимаю. Если вы имеете в виду, что нужно было что-то докачивать-прикручивать, кроме jre/jdk с офсайта — то нет, оно шло в комплекте как раз с 6u10.
                  +1
                  В статье правильнее было бы указать на эту ссылку:

                  With JDK 7, Nimbus will be moved from an Oracle-proprietary extension (com.sun.java.swing) to a standard API (javax.swing) so that it becomes a true first class Swing citizen.
              +2
              Стоит добавить еще вот это: www.lucidimagination.com/blog/2011/07/28/dont-use-java-7-for-anything/
                +2
                Да и так понятно, что крупные компании не перейдут на java7 ещё долго, не один апдейт успеет выйти.
                  +3
                  К сожалению, в приведенной статье говорят не об этом. В новом релизе ввели баг, из-за которого могут неверно скомпилироваться циклы. А это делает нестабильным не только софт больших компаний
                    0
                    «These problems were detected only 5 days before the official Java 7 release,
                    so Oracle had no time to fix those bugs»

                    обещают пофиксить в u1
                      +3
                      Баг довольно серьезный, могли отложить релиз и пофиксить.
                +3
                Такое чувство, что статью писал СЕО-шник:) Особенно, глядя на теги.
                  0
                  Не совсем понял, почему. Теги — да, я их всегда ставлю так, чтобы статью было легче найти.
                  0
                  MBean-ы теперь могут сообщать о загрузке процессора как всей системы, так и JVM и умеют отправлять уведомления, когда происходит сборка мусора.

                  Да, только классы лежат в com.sun пакете, что юзать категорически не рекомендуется по соображениям высокой вероятности не обнаружить их в новой версии или апдейте.
                  –2
                  не прошло и…
                    +1
                    Скажите, а это как-то затрагивает Android или это две разные области, которые в данном случае не пересекаются?
                    • НЛО прилетело и опубликовало эту надпись здесь
                        0
                        SWING с другой темой (UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());) умеет показывать компоненты более-менее нативно для трёх ОС, кроме того можно использовать «совсем нативные» компоненты в SWT.
                          +2
                          UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                          

                          ?
                            0
                            опоздал :)
                            • НЛО прилетело и опубликовало эту надпись здесь
                                0
                                Нативный LaF далеко не всегда работает нормально. Чаще всего нужно допиливание для каждой платформы. Потому что является это все в целом хаком — нативный компонент рисуется в буффер, потом картинка передается свингу и т.д. Поэтому в пятой версии это все заменили на Metal, который на всех платформах выглядел одинаково — вполне в соответствии с идеями жабы.

                                Мне вот интересно — раз теперь нимбус есть, и весь процесс его рисования можно переопределить через пэинтеры, появятся ли наборы настроек для нимбуса чтобы рисовать его нативными компонентами?
                                • НЛО прилетело и опубликовало эту надпись здесь
                                    0
                                    Скорее всего это ограничения самого свинга. SWT ведь тоже нормально работает.

                                    А как Qt рисует компоненты? Передает контроль ОС, или сама определяет как все нужно рисовать?
                                    • НЛО прилетело и опубликовало эту надпись здесь
                                        0
                                        В винде и в линуксе (не знаю, как с маком) можно отделать использовать системный движок отрисовки тем, чем Qt и пользуется.
                                          0
                                          ну, как я понимаю, SWT этим и занимается.
                              0
                              самое интересное это try-with-resources имхо (http://download.oracle.com/javase/7/docs/technotes/guides/language/try-with-resources.html)
                                –2
                                Приятно осозновать, что выбрал правильный язык 4 года назад :)
                                  0
                                  php? ^_^
                                  0
                                  Вроде, ещёдобавили Multiple exception catch block, то есть, возможность одинаково обрабатывать несколько типов исключительных ситуаций в рамках одного catch в блоке try..catch.

                                  Вот так: www.javac.info/Multicatch.html
                                    0
                                    Это часть project coin.
                                    +2
                                    не правильные у вас обзоры, вот у нас в php всё под кальку делается «исправлена ошибка ....»
                                    в java действительно ошибок нет или это просто в обзорах остаётся в тени?

                                    а почему такие проблемы с принятием проекта лямбда?
                                      +3
                                      Ну вот всё хорошо, ну всё прекрасно. НО. Мне одному показалось, что на картинке в заголовке изображение означает следующее —

                                      Клоун-дантист из ассоциации любителей ракетных ранцев прикидывается любителем новомодных гаджетов?
                                        +2
                                        Поздравляю, вы один из тех немногих, кто видит правду сквозь дымку притворства. Приглашаю на завтрашнее заседания ассоциации по борьбе с ZOG. Событие произойдёт на заброшенной правительственной базе по исследованию инопланетян в Атлантиде.
                                        0
                                        Новый декОратор JXLayer
                                          0
                                          Ко всему прочему интересно, он такой же новый, как три года назад на Tech Days?
                                          0
                                          Интересно, они уже поправили баг в zip-е, который ломал не латинские символы в названиях файлов?

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

                                          Самое читаемое