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


Интересна Java? Кликай по ссылке и изучай!
Если тебе полезно что-то из того, чем я делюсь в своем блоге - можешь поделиться своими деньгами со мной.
с пожеланием
столько времени читатели провели на блоге - 
сейчас онлайн - 

воскресенье, 23 января 2011 г.

Java for fun: Как превратить java приложение в win32 приложение (java в exe)?

У меня есть чудная програмка XMind в ней я уже построил большую большую карту. И чем больше эта карта тем больше меня напрягает тормоза. Обижаться на нее не могу, потому как она сама быстрая из тех, что попадали мне в руки - от моей карты FreeMind даже не открылась, а онлайн портал mindmeister.com продемонстрировал много багов. Какой выход? Пробовать дальше и ждать, когда либо java обновится, либо мой компьютер обновится :) либо что-то еще, чего я не знаю, но что обязательно поможет. Читать дальше...

Помогло - очередной раз запуская XMind чтобы побрейнштормить, у меня в голове всплыла аббревиатура JIT. Стал ковырять. Оказывается есть возможность превратить java class в exe файл, а набор используемых им jar библиотек в dll библиотеки. Это под Windows. Уверен и для других операционок есть возможность конвертировать. Итак возможность есть - найдем программу, реализующую эту возможность. Слава гуглу, я нашел некий Excelsior JET. Судя по его описанию - это именно то, что мне нужно.

Проглядывая ряд видеомануалов я пришел к выводу, что XMind программка основана на базе Eclipse RPC. Excelsior JET поддерживает конвертацию как простых java программ, так и Eclipse RPC программ. Супер!

Чтобы скачать программу, мне пришлось заполнить небольшую формочку обратной связи
после чего я получил линк на скачивание на свой почтовый ящик.

Скачал, запустил и начал разбираться. Скриншоты выкладывать не буду - видео, предложенное на сайте разработчика более чем достаточно. Я проделал все так, как было описано в видео уроке. Но наткнулся на одно исключение: некая библиотека не распознавалась Excelsior JET - ее я просто удалил, потому как название папки, в которой она находилось, намекнула мне на то, что она используется только под linux. Вот сам видеоурок:




Конвертация порядка 10 000 java классов заняла около часа времени, но все прошло на удивление гладко.

На выходе я получил купу файлов и папок, среди которых есть инсталятор


Который ко всему успешно запустился и установил XMind в указанную папку.


Примечательно то, что даже библиотека JRE конвертировалась в DLL.


А вот и замеры производительности то, ради чего я инвестировал пол дня процессорного времени - по три замера основных операций, которые меня напрагяли:


Упс... А где тут оптимизация? А вот она :) Программа стала меньше кушать памяти на 200 mb :)

оригинальная версия


скомпилированная версия


Но не этого я ожидал.

Хотя причин, по которым оптимизации не состоялось может быть целый океан, но на детальное исследование может уйти недели времени. А если по шурику - то эксперимент не удался.

Видимо компьютер менять пора... 

7 комментариев:

  1. Все банально: причина отсутствия ускорения, то что в java, как и в .NET, есть JIT компиляция, которая использует все преимущества вашей системы. А в случае компиляции через сайт, скорее всего была использована generic архитектура, чтоб приложение могло запуститься на любой платформе.

    ОтветитьУдалить
  2. Кстати, в так ненавистном вам .NET (кстати, я так и не понял почему), программы можно прекомпилировать для того, чтобы не тратилось время на jit компиляцию. Для этих целей используется утилита ngen

    ОтветитьУдалить
  3. Спасибо за комментарий.

    >>>есть JIT компиляция
    Она-то есть, но вот разработчики Excelsior JET, сообщили мне, что ихний подход "helps you make your Java applications start and work faster".

    >>>Кстати, в так ненавистном вам .NET (кстати, я так и не понял почему)
    Есть некоторое убеждение, изначально принятое на веру. Раз есть убеждение, то сознание ищет повод его подтвердить. И находит. Притягиваю, так сказать, к себе проблемы с этим фреймворком.

    Я вот сегодня на Stamina текст набирал "Люди делятся на две категории: те кто не знает, кто такой Бил Гейтс и те, кто его не любят". А почему его не любить? Он изменил мир и сделал его таким, какой он есть сейчас. То, что я могу делать сейчас - его заслуга.

    По этому не берите на свой счет мое предубеждение относительно .NET фреймфорка. Даст Бог, я его перерасту.

    ОтветитьУдалить
  4. >"helps you make your Java applications start and work faster"
    со "start" согласен (см. мой второй коммент), т.к. время не тратится на jit.
    А вот с "work" в общем случае должно быть хуже.

    Судя по твоим постам, имхо, тебя не устраивает очень плотная интеграция .NET внутрь windows. Это и понятно, если сравнивать с java - какой JAVA_PATH задашь при запуске та версия и будет использоваться. Но с этим, также бывают проблемы: например, Oracle SQL Developer поставляется с версией JDK 1.5(емнип), и стандартно убивает Windows Aero - приходится качать noJDK версию и танцевать с бубном, чтоб прикрутить установленный JDK (последней версии).

    К плюсам такой программы несомненно стоит отнести защиту от декомпиляции (если она действительно делает нативный код, а не делает склейку java.exe + program.jar в один exe файл). В, свое время для .NET мы искали что-то похожее, но были только платные и убогие утилиты.

    Для прикола: есть реализация Java VM поверх .NET - www.ikvm.net

    ОтветитьУдалить
  5. >>> К плюсам такой программы несомненно стоит отнести защиту от декомпиляции
    Да, разработчики и об этом упомянули.

    >>>есть реализация Java VM поверх .NET - www.ikvm.net
    И сюда пробрались...

    >>> Но с этим, также бывают проблемы
    Таки да

    В любом случае, ребятки, разработавшие этот трансформатор - большие молодцы!

    ОтветитьУдалить
  6. Если у Вас найдётся ещё немного времени для экспериментов, свяжитесь с нами, пожалуйста, адрес java@наш-домен.

    Заранее спасибо.

    Дмитрий Лесков
    ООО Эксельсиор

    ОтветитьУдалить