| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > exe: Java и C++ |
| Автор: Амортизатор 20.5.2006, 23:25 |
| Интересно узнать о том, насколько исполняемый exe, полученный компиляцией программы на java под конкретную платформу (Windows), уступает C++. Интересуют основные характеристики - скорость исполнения (то бишь качество оптимизации) и размер исполняемого exe (со всеми подключаемыми модулями разумеется). Внимание - тема продублирована в разделе "C++ - общие вопросы" с целью узнать мнения обеих сторон. Просьба не переносить данную тему в "Священные войны" или куда еще, поскольку ставится конкрентный вопрос, на который требуется конкретный ответ, не более того. |
| Автор: 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 | ||
Почему? По моему вполне нормально. Например хочется человеку оценить, что приобретаешь переходя на Java, и насколько велики будет потери. Объем например возрастет значительно. |
| Автор: powerOn 21.5.2006, 19:29 |
| Вот есть exe написанный на С++. Он тягает функции операционной системы (например GDI) для прорисовки своего графического интерфейса. А GDI тоже где-нибудь надо взять, и ведь это никто не учитывает! Считают, что user32.dll есть в каждой Windows системе и транспортировать его с прогой не надо. И так, кстати, со многими функциями - необходимые библиотеки уже есть в системе и нет необходимости их транспортировать вместе с программой. Получается, что размер инсталятора C++ проги не большой. Java работает в своем окружении, и использует к примеру Swing, которое также придется компилировать в библиотеки. Но этих библиотек, естественно нет на целевой машине. И их приходится включать в инсталятор. От сюда его не хилые размеры. На самом деле разницы не много. И будь Java окружение уже становлено на целевой машине, то еще не известно чей exe больше будет. Так что давайте учитывать все зависимости, либо не учитывать их вообще. |
| Автор: Амортизатор 21.5.2006, 19:42 | ||
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 На мой взгляд, нет смысла компилить Java программу в нативный код. По скорости выигрыш не значительный и теряется переносимость. Докучи размер дистриба, без установленного скомпилированного JRE. разростается как на дрожжах. |