Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > exe: Java и C++


Автор: Амортизатор 20.5.2006, 23:25
Интересно узнать о том, насколько исполняемый exe, полученный компиляцией программы на java под конкретную платформу (Windows), уступает C++. Интересуют основные характеристики - скорость исполнения (то бишь качество оптимизации) и размер исполняемого exe (со всеми подключаемыми модулями разумеется).

Внимание - тема продублирована в разделе "C++ - общие вопросы" с целью узнать мнения обеих сторон. Просьба не переносить данную тему в "Священные войны" или куда еще, поскольку ставится конкрентный вопрос, на который требуется конкретный ответ, не более того. 

Автор: LSD 21.5.2006, 00:35
Пазмер естественно будет больше, все таки надо JRE включать. Скорость будет хуже чем у чистой JRE, хотя тут возможны варианты.


Цитата(Амортизатор @  21.5.2006,  00:25 Найти цитируемый пост)
Внимание - тема продублирована в разделе "C++ - общие вопросы" с целью узнать мнения обеих сторон.

Интерестно откуда сишники могут знать, как ведет себя Java приложение скомпилированное в native код. 

Автор: ALKS 21.5.2006, 09:33
так ведь JRE включают в экзешник редко(кому нужны экзешники такого размера?) как правило экзешник это просто загрузчик в несколько сотен килов, который делает какой-то минимум работы и стартует програмку вместе с JRE уже установленным на машине. 

во-вторых (с включенной JRE или нет )это не компеляция под конкретную платформу... компеляция это нечто иное... я знаю тока что Excelsior JET такое может с Java делать, но я  лично никогда не пробовал. 

Автор: LSD 21.5.2006, 11:04
Во первых еще например GCJ может такое делать. И еще парочка утилит была, но сейчас уже не вспомню.
Во вторых, при таком подходе именно что приходится включать JRE в комплект, или в exe-шник, или в виду dll-ей. 

Автор: ALKS 21.5.2006, 13:02
собственно не важно. важно то что сравнивать такой Java EXE с откомпелированным C собственно совсем не корректно. 

Автор: LSD 21.5.2006, 13:12
Цитата(ALKS @  21.5.2006,  14:02 Найти цитируемый пост)
важно то что сравнивать такой Java EXE с откомпелированным C собственно совсем не корректно.

Почему?

По моему вполне нормально. Например хочется человеку оценить, что приобретаешь переходя на Java, и насколько велики будет потери. Объем например возрастет значительно. 

Автор: powerOn 21.5.2006, 19:29
Вот есть exe написанный на С++. Он тягает функции операционной системы (например GDI) для прорисовки своего графического интерфейса. А  GDI тоже где-нибудь надо  взять, и ведь это никто не учитывает! Считают, что user32.dll есть в каждой Windows системе и транспортировать его с прогой не надо. И так, кстати, со многими функциями - необходимые библиотеки уже есть в системе и нет необходимости их транспортировать вместе с программой. Получается, что размер инсталятора C++ проги не большой.

Java работает в своем окружении, и использует к примеру Swing, которое также придется компилировать в библиотеки. Но этих библиотек, естественно нет на целевой машине. И их приходится включать в инсталятор. От сюда его не хилые размеры. 

На самом деле разницы не много. И будь Java окружение уже становлено на целевой машине, то еще не известно чей exe больше будет.

Так что давайте учитывать все зависимости, либо не учитывать их вообще.  

  

Автор: Амортизатор 21.5.2006, 19:42
Цитата(MoonCat @  21.5.2006,  19:29 Найти цитируемый пост)
Так что давайте учитывать все зависимости, либо не учитывать их вообще. 


MoonCat, я полагаю, нужно учитывать то, что имеет место быть в сегодняшной Windows. Да, любое Windows-приложение использует кучу api-функций, которые поставляются вместе с Windows в качестве прикладного программного инструментария, и размер внешних библиотек зачастую бывает больше собственного кода программы. Однако этот факт как раз является преимуществом использования С++, так как я сравниваю не 2 технологии как таковые (C++ vs Java), а реальные преимущества каждой из них на конкретной платформе. 

Автор: ALKS 21.5.2006, 20:17
C++ и Java это не технологии это языки программирования. и сравнивать их реальные приимущества путем сравнения EXE файлов... как минимум странно. 

Автор: Амортизатор 21.5.2006, 21:29
ALKS, согласен, что понятие "технология" в отношении С++ не совсем применимое, хотя вопрос спорный, но Java - в первую очередь именно ТЕХНОЛОГИЯ, и лишь потом язык, который просто входит в состав технологии. 

Автор: LSD 21.5.2006, 22:31
MoonCat, да программа на С++ использует системные функции, но:
1. user32.dll - действительно есть в каждой Windows системе и транспортировать его с прогой не надо
2. сама JVM использует user32.dll и кучу других API (даже DirectDraw)
3. у Java есть еще нехилый рантайм не связанный с внешними взаимодействиями, в частности сборщик мусора, рефлексия и т.д.

А вообще по мне, компилить Java приложения в native код, надо в очень ограниченом количестве случаев. А так просто использовать инсталятор, который ставит вместе с приложением JRE. 

Автор: powerOn 22.5.2006, 01:17
LSD, Я веду к тому, что для С++ Windows система почти как родная. Все под рукой. А для Java - нет.  Поэтому приходится распространять Java программы либо в byte-code с JRE, либо в скомпилированном виде с JRE. Что сильно раздувает дистрибутив.

При этом подобной ситуацией обладает лишь Windows  smile , остальные же ОС (Linux, Solaris (про Мак не знаю)) сразу же имеют установленную  JRE как минимум.,что позволяет транспортировать Java программу без лишнего багажа.  

На мой взгляд, нет смысла компилить Java программу в нативный код. По скорости выигрыш не значительный и теряется переносимость. Докучи размер дистриба, без установленного скомпилированного JRE. разростается как на дрожжах.

 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)