Какие классы абсолютно необходимы для запуска Java VM? - PullRequest
6 голосов
/ 08 ноября 2010

Какое наименьшее подмножество классов может запускать Java VM?

Полагаю, такие вещи, как Object, String и примитивы абсолютно необходимы, поскольку они встроены во многие части виртуальной машины.

Меня интересует, насколько велики зависимости между JVM и JDK.

Основной вопрос, который меня интересует:

Если бы я решил распространять JVM с другим языком программирования и разные стандартные библиотеки, как большая часть классов "Java" у меня есть носить с собой, чтобы осчастливить JVM?

Ответы [ 4 ]

3 голосов
/ 08 ноября 2010

Лучший способ узнать это - попробовать и посмотреть; например используйте java -verbose. для запуска минимальной программы на различных языках JVM.

Но ответ, вероятно, будет:

  • для конкретной версии JVM и
  • специфический язык программирования.

Я также должен отметить, что полученный вами ответ не будет иметь никакого практического применения (... если только вы не планируете создавать сокращенную JRE. И если это так, прочитайте приведенную ниже последовательность действий. .)

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

JVM не загружает вещи на этой основе. Скорее, он загружает закрытие зависимостей, от которого статически зависит ваш код. В зависимости от того, какие классы использует ваше приложение, это может привести к загрузке классов, которые фактически не используются. Инженеры Sun проделали большую работу, пытаясь уменьшить этот эффект на протяжении многих лет, но это, несомненно, все еще происходит в некоторой степени.

СЛЕДУЙТЕ ЗА

Читая между строк, кажется, что целью является создание урезанного пакета JVM для поддержки требований времени выполнения какого-либо другого языка. Если так, рассмотрите эти пункты:

  • Существуют лицензионные требования в отношении того, что вы можете делать с Java в отношении создания урезанных версий. В частности, Java, JVM и JRE являются товарными знаками, и Oracle может последовать за вами, если вы будете использовать их в контексте сокращенной JRE. (Я не говорю, что вы не можете этого сделать, но вам нужно необходимо самостоятельно проверить юридические аспекты.)

  • Определенно есть проблемы с поддержкой. Например, вам необходимо отслеживать любые соответствующие проблемы безопасности и исправления Java / JVM и создавать новые версии базовой платформы по мере необходимости.

  • Если вы намереваетесь предоставить прикладным программам на вашем новом языке какой-либо способ вызова библиотек Java, то использование урезанной JRE может стать серьезной болью для некоторых пользователей. Особенно, если вы упаковываете свои вещи таким образом, что они должны использовать вашу сокращенную JRE.

  • В JRE / JDK есть инструменты, которые могут быть полезны вам / вашим пользователям. Инструменты, такие как профилировщики, отладчики, команда JAR и так далее. Ваша JRE должна включать все классы, необходимые для их запуска.

Наконец, загрузка 100 МБ не является существенной проблемой для БОЛЬШОГО БОЛЬШИНСТВА пользователей. И если это так, вы можете заработать немного денег для поддержки своего проекта, продавая установочные DVD-диски.

Сосредоточьтесь на том, что вы действительно пытаетесь сделать здесь ... и оставьте оптимизацию установщика, когда вам нужно оптимизировать качество производства.

1 голос
/ 08 ноября 2010

Если вы запустите команду:

java -verbose

Она покажет вам каждый загруженный класс для запуска ВМ.Если вы добавите -verbose при запуске Java-программы, вы получите полный список того, что нужно запустить этой программе.Но это не включает дополнительные классы, которые могут ему понадобиться, поскольку это делает его работу.

Зачем вам нужно знать, какие классы нужны?

0 голосов
/ 23 ноября 2010

IANAL, но вы можете подвергнуться судебному преследованию со стороны Oracle, если сократите классы java.*, потому что для публичной выдачи патентов Sun / Oracle на патенты JDK требуется, чтобы вы реализовали полные интерфейсы java.* и совместили со стандартом. (Я думаю, что это часть того, от чего зависит костюм Google.)

Кроме того, я думаю, что разработчики Jigsaw Project имеют нетривиальное время, решая, что входит в базовую установку JDK, а что в модуль. Я вспоминаю, как читал пост в блоге (не могу найти его сейчас) о некоторых проблемах, нарушающих циклические зависимости между вещами, которые должны быть в модулях (XML, IIRC), и базовой установкой.

0 голосов
/ 08 ноября 2010

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

Если вы используете мобильное устройство и вам необходимо сохранитьемкость, я предлагаю вам использовать JME.Однако, если вы используете настольный компьютер, где 200 МБ стоит меньше, чем одна копейка, стоит ли риск?Если он взорвется, это будет стоить вам больше, чем копейки, я подозреваю, что это будет стоить.

Аналогия: вы идете по главной дороге, и вы видите, что может быть пенни на другой стороне.Вы переходите дорогу через интенсивное движение, чтобы получить это?Я предлагаю вам просто продолжать идти.

РЕДАКТИРОВАТЬ: Если вы хотите урезанную версию Java, вы можете попробовать встроенную версию.http://www.oracle.com/technetwork/java/embedded/downloads/index.html

Имеет 32 МБ и 70 МБ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...