Java SE действительно очень впечатляющая платформа, но со всей этой функциональностью все больше и больше. Тогда понятно, что одним из наиболее частых запросов сообщества было желание развернуть только те компоненты, которые требуются для конкретного приложения, а не всю среду выполнения Java SE. Упомянутые как подмножества, преимущества такой концепции, по-видимому, много:
- Меньшая среда Java потребует меньше вычислительных ресурсов, открывая, таким образом, новый домен устройств, которые ранее считались слишком скромными для Java.
- Среда выполнения меньшего размера могла бы быть лучше оптимизирована для производительности и времени запуска.
- Исключение неиспользуемого кода всегда хорошая идея с точки зрения безопасности.
- Если среда может быть значительно сокращена, может быть огромное преимущество в объединении сред выполнения с каждым отдельным приложением Java.
- Эти связанные приложения могут быть загружены быстрее.
Несмотря на эти очевидные преимущества, стюарды платформы (Sun, затем Oracle) были стойкими в своем сопротивлении подмножеству. Обоснование такой позиции довольно простое: была искренняя обеспокоенность тем, что платформа Java SE будет фрагментирована. Согласитесь или не согласитесь, стандарт Java SE оставался замечательно в такте в течение долгого времени. Если вам нужны дальнейшие доказательства этого утверждения, сравните состояние Java SE с состоянием Java ME, особенно в области мобильной телефонии. Более того, посмотрите, как быстро Android породил бесчисленные варианты за свою короткую жизнь.
Тем не менее, предпринимаются официальные усилия, направленные на создание гораздо более модульной платформы Java. Названный Project Jigsaw , когда он будет завершен, Java SE будет состоять из набора более мелких модулей и будет включать инструменты, позволяющие разработчикам идентифицировать и изолировать только те модули, которые необходимы для их приложения. Однако реализация этого масштабного внутреннего изменения и в то же время поддержание совместимости оказалась серьезной проблемой. Следовательно, полная реализация модульной платформы Java была отложена до Java 9 .
Понимая, что Java 9 довольно далека, будет доступно временное решение для Java 8, которое называется Compact Profiles . Вместо того, чтобы указывать полную модульную систему, Java 8 будет определять профили подмножеств спецификации платформы Java SE, которые разработчики могут использовать для развертывания. В настоящее время определены три компактных профиля, которым присвоены креативные имена compact1 , compact2 и compact3., В следующей таблице перечислены пакеты, которые составляют каждый из профилей. Каждый последующий профиль является надмножеством своего предшественника. То есть профиль compact2 содержит все пакеты в compact1 плюс те, которые перечислены в столбце compact2 ниже. Аналогично, compact3 содержит все пакеты compact2, а также пакеты, перечисленные в столбце compact3.
compact1 compact2 compact3 -------------------------- ----------------------- -------------------------- java.io java.rmi java.lang.instrument java.lang java.rmi.activation java.lang.management java.lang.annotation java.rmi.registry java.security.acl java.lang.invoke java.rmi.server java.util.prefs java.lang.ref java.sql javax.annotation.processing java.lang.reflect javax.rmi.ssl javax.lang.model java.math javax.sql javax.lang.model.element java.net javax.transaction javax.lang.model.type java.nio javax.transaction.xa javax.lang.model.util java.nio.channels javax.xml javax.management java.nio.channels.spi javax.xml.datatype javax.management.loading java.nio.charset javax.xml.namespace javax.management.modelbean java.nio.charset.spi javax.xml.parsers javax.management.monitor java.nio.file javax.xml.stream javax.management.openmbean java.nio.file.attribute javax.xml.stream.events javax.management.relation java.nio.file.spi javax.xml.stream.util javax.management.remote java.security javax.xml.transform javax.management.remote.rmi java.security.cert javax.xml.transform.dom javax.management.timer java.security.interfaces javax.xml.transform.sax javax.naming java.security.spec javax.xml.transform.stax javax.naming.directory java.text javax.xml.transform.stream javax.naming.event java.text.spi javax.xml.validation javax.naming.ldap java.util javax.xml.xpath javax.naming.spi java.util.concurrent org.w3c.dom javax.script java.util.concurrent.atomic org.w3c.dom.bootstrap javax.security.auth.kerberos java.util.concurrent.locks org.w3c.dom.events javax.security.sasl java.util.jar org.w3c.dom.ls javax.sql.rowset java.util.logging org.xml.sax javax.sql.rowset.serial java.util.regex org.xml.sax.ext javax.sql.rowset.spi java.util.spi org.xml.sax.helpers javax.tools java.util.zip javax.xml.crypto javax.crypto javax.xml.crypto.dom javax.crypto.interfaces javax.xml.crypto.dsig javax.crypto.spec javax.xml.crypto.dsig.dom javax.net javax.xml.crypto.dsig.keyinfo javax.net.ssl javax.xml.crypto.dsig.spec javax.security.auth org.ieft.jgss javax.security.auth.callback javax.security.auth.login javax.security.auth.spi javax.security.auth.x500 javax.security.cert
Вы можете спросить, какую экономию можно получить, используя компактные профили? Поскольку Java 8 находится на стадии подготовки к выпуску, числа со временем меняются, но давайте взглянем на снимок ранней сборки доступа SE SE-Embedded 8 для ARMv5 / Linux. Разумно настроенный профиль compact1 занимает менее 14 МБ . Compact2 — около 18 МБ, а compact3 — около 21 МБ. Для справки: последняя среда Java 7u21 SE Embedded ARMv5 / Linux требует 45 МБ.
So at less than one-third the original size of the already space-optimized Java SE-Embedded release, you have a very capable runtime environment. If you need the additional functionality provided by the compact2 and compact3 profiles or even the full VM, you have the option of deploying your application with them instead.
In the next installment, we’ll look at Compact Profiles in a bit more detail.