Java-программа и JVM произвели exe - PullRequest
2 голосов
/ 16 октября 2011

Java не зависит от платформы, поскольку для запуска Java-программы используется зависящая от платформы JVM.JVM понимает байтовые коды и выполняет программу.Я знаю, старый способ сделать это был переводчик.Но сейчас JVM использует JIT.Но я не совсем понял концепцию JIT.Я думаю, jVM может переводить байтовые коды в exe (для Windows), и после этого я могу запустить эту переведенную программу без JVM.Но я могу увидеть сгенерированный exe в .net JIT, но не могу увидеть сгенерированный exe в Java.

  1. Как я могу это сделать (создать собственный exe-файл из Java)?
  2. Чтобудет производительность JVM, созданного exe против того же приложения C?
  3. Как Java будет обрабатывать статические и динамические ссылки?

Ответы [ 4 ]

4 голосов
/ 16 октября 2011

Некоторые мысли:

  1. Вы не можете сгенерировать исполняемый файл, используя только ядро ​​Java, и JVM определенно этого не делает. Он все еще выполняет байт-код в JVM. Фактический исполняемый файл, который запускается здесь - java.exe.
  2. Трудно сказать, будет ли exe работать значительно быстрее, поскольку JIT генерирует чертовски быстрый код.
  3. Java не создает библиотеки DLL, если вы это имеете в виду, но она может взаимодействовать с правильно сформированными библиотеками DLL (не .Net DLL) через JNI и JNA. Если вы хотите взаимодействовать с библиотеками .Net, я думаю, вам нужно будет пойти другим путем, таким как сокеты или интерфейс COM.

Кроме того, существуют программы, которые создают exe-файлы из классов Java, но большинство создают файлы, которые все еще требуют JVM, и хорошие, которые не Я считаю, не бесплатны.

2 голосов
/ 16 октября 2011
  1. В этом нет особого смысла.
  2. Иногда быстрее, иногда медленнее.
  3. Не знаю.
1 голос
/ 16 октября 2011

Я думаю, jVM может переводить байтовые коды в exe (для Windows), и после этого я могу запустить эту переведенную программу без JVM.

Это не правильно.

На самом деле JIT-компиляторы Hotspot работают, компилируя отдельные методы в собственный код внутри работающей JRE. Обычно они пытаются компилировать методы только после того, как их несколько раз вызывали для сбора статистики по типичным путям выполнения. Компиляторы Hotspot JIT никогда не производили exe.

1) Как я могу это сделать (создать собственный исполняемый файл из Java)?

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

2) Какова будет производительность JVM, производимой в сравнении с тем же приложением C?

Это зависит от приложения.

3) Как Java будет обрабатывать статические и динамические ссылки?

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


Я бы порекомендовал не идти по этому пути. Если вам важно распространять свой код в виде файлов «.exe», вам, вероятно, не следует использовать Java.

0 голосов
/ 16 октября 2011

Как я могу это сделать (создать собственный исполняемый файл из Java)?

Существует распространенное заблуждение, что в некотором роде это будет лучше. Тем не менее, я не видел хорошей ситуации, где это. Есть такие продукты, как Excelsior JET, которые могут компилировать двоичный файл. GCC может скомпилировать двоичный файл для Java 1.4, но это не текущий проект AFAIK.

Какова будет производительность JVM, производимой в сравнении с тем же приложением C?

Вы не можете сравнить их. Если вам нужна объектно-ориентированная программа, вы не можете легко написать это на C, и она почти наверняка будет гораздо медленнее писать, если не будет выполняться. Если вы хотите написать программу в стиле C, напишите ее на C.

Как Java будет обрабатывать статические и динамические ссылки?

JVM выполняет динамическое позднее связывание. Если это так, он может связывать и повторно связывать код несколько раз при загрузке и выгрузке загрузчиков классов.

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