четверг, 7 января 2010 г.

Что нового в JDK 7 - Часть вторая

Вторая часть повествования о новом в JDK7, в первой части повествования о новинках в JDK 7 я говорил расширенной поддержке поллекций, автоматическом управлении ресурсами, diamond операторе и некоторых других новшествах.

Сейчас я расскажу о других новшествах (за исключением Closures, их я оставлю для 3ей части).

Новый сборщик мусора - Garbage First GC (“G1”)
Новый сборщик мусора предназначенный для работы в эру многопроцессорных систем с большим количеством оперативной памяти. Старый сборщик мусора работал со всей оперативной памяти и с ростом количества оперативной памяти его работа становилась все более и более заметна. Новый сборщик мусора должен решить эту проблему за счет разбиения памяти на маленькие регионы, внутри которых будет выполняться сборка мусора по специальным алгоритмам.

Это большое нововведение, которое ожидалось многими разработчиками. Вы можете прочитать подробно о технических аспектах реализации G1 в статье Garbage-First Garbage Collection. Те кому нетерпится побыстрее испытать его в деле - могут это сделать уже JDK 6 update 14 и старше с помощью ключей -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC

JSR 308: Аннотации
В JDK 6 аннотации были ограничены применением только при декларации пременных, методов, пакетов. В JDK 7 эти ограничения будут сняты и их можно будет использовать для любых типов. Но при этом аннотации не могут быть использованы для изменения семантики языка.

JSR 294: Project Jigsaw - Модулизация
В недрах SUN ведется разработка проекта Jigsaw, который должен повысить модульность JDK. Во многом это повторение работы, выполненной в рамках разработки стандарта OSGI. В JDK7 будет реализовано новое ключевое слово module. С помощью этих возможностей планируется реализация профилей JDK (аналог профилей JEE), позволяющих адаптировать JDK для работы в различных уловиях. За счет уменьшения зависимостей планируется решить проблему размера JDK, время её старта а также размер потребляемой памяти.

JSR 203: NIO2 - New I/O API
В рамках работы над новым API для ввода/вывода планируется решить 3 основных задачи:
  • Новый API для работы с файловой системой, групповой работой с атрибутами, сокрытие API специфичного для конкретной файловой системы или операцинной системы.
  • Обновление API socket-channel, позволяющее работать с каналами без использования классов из java.net
  • Асинхронный ввод/вывод (самое главное)
Подробнее о NIO2 на странице проекта NIO Обновление API XML-стэка Обновление JAXP, JAXB, и JAX-WS API до последних стабильных версий


В третьей части я рассмотрю подробно замыкания (Closures).