| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > GNU toolchain > Можно программу на Java в gcc компилить? |
| Автор: Dray 16.2.2006, 01:44 |
| Слышал можно Java код на gcc в Линуксе компилировать. Правда это? |
| Автор: tux 16.2.2006, 02:37 |
| Сущая правда - http://gcc.gnu.org/java/. Может компилить исходники не только в байт-код, но и непосредственно в машинный код процессора и преобразовывать байт-код в машинный код. |
| Автор: batigoal 16.2.2006, 09:07 |
| А есть ли смысл? Ведь официальный компилятор бесплатен. |
| Автор: 3,14 16.2.2006, 10:12 |
| Компилить в машинный код клиентские приложения ещё как имеет, побыстрее работать будут |
| Автор: anonymouse 23.2.2006, 11:28 |
| Не хочется тебя огорчать но это не совсем так. Виртуальные машины уже достаточно оптимизированы и компилирование в машинный код необходимо только в конкретных случаях. |
| Автор: erka 23.2.2006, 17:21 | ||||
| вообще странное приложение получается.я по крайней мере не могу сказать, что там только машинные кода. можете попробывать потестить. вообще берем простой класс и в нем делаем в каком-то методе Class.forName(). Предположем так...
Компилим с помощью gcj. (gcj --main=Start -o someName.exe Test.java ). получаем someName.exe берем второй класс, например
Компилим это нашим javac, получаем TestLoad.class в одной папке собираем TestLoad.class,someName.exe и dll, которые нужны (смотря чем компилить). запускаем someName.exe и что получается ? У меня на Windows + gcj 3.4.5 c mingw - "Hello world". Какой тут машинный код спрашивается? |
| Автор: LSD 23.2.2006, 17:48 |
| Не знаю как GCJ, но Jet Excelsior поддерживает динамическую загрузку классов, и компиляцию их прям во время исполнения. 1. Попробуй запустить приложение на голой системе без JRE. 2. Попробуй вместо константы вставить туда скажем args[0]. |
| Автор: 3,14 26.2.2006, 13:04 | ||
Ну GUI в java, например, работает, мягко говоря, не очень быстро. |
| Автор: anonymouse 27.2.2006, 11:16 | ||
Тут даже не заню что сказать с одной стороны зависит от того как писать, но с другой стороны у самого осталась оссоциация java и медленного гуи. Может всетаки виноват свинг ? И неужели откомпилированная в машинный код программа начинает заметно быстрее работать с гуи ? |
| Автор: LSD 27.2.2006, 11:24 | ||
По моему опыту, нет. |
| Автор: Бонифаций 27.2.2006, 11:26 |
| гуй гую рознь. Тот же swt весьма шустро работает в явовских программах. По крайней мере визуально от сишных программ по скорости не отличить |
| Автор: LSD 27.2.2006, 11:28 |
| Зато глючит, я например в одной SWT-шной программе регулярно наблюдаю десктоп сквозь главное окно. |
| Автор: sergejzr 27.2.2006, 11:33 | ||
И первое верно и второе верно. Java код работает очень шустро. Единственный недостаток - медленный ГУИ (но это только под виндой кстати). Думаю медленность ГУИ связана с кроссплатформенностью. Вон SWT например - летает. А на процессорах > 3 гигагерц и свинг летает Вообще скорость ГУИ от байткод/нативный-код мало зависит. Те же самые вызовы АПИ. GCJ линкует сборщика мусора (при компиляции там тоже можно кое какие опции выставить), в остальном - тотже exe, что и с++. По моему личному опыту по скорости что gcj скоппованная, что javac - проги не отличаются. Но на линуксе "нормальный" javac намного удобнее конечно из за кроссплатформенности. Смысл gcj же вижу только для того, чтобы поиграть. Добавлено @ 11:36 PS: JAV исты зря в ГУИ полезли вообщето. ИМХО именно этим JAVA себе "славу" медленности заработала. Иначе возможно она была бы намного распространённее для консольных приложений, библиотек и что немаловажно - серверов. Потому что по всем параметрам кроме ГУЙ она перегоняет многие языки по скорости и удобству. |
| Автор: Бонифаций 27.2.2006, 11:41 |
| 1) иногда удобно 1 выполняемый файл иметь. Без необходиомсти ставить jre 2) в gcj более тесная интеграция с всеми gcc-шными языками. 3) скорость скомпилированной программы сопоставимая с jre, но все-таки выше. В тех случаях когда это критично, имеет смысл рассмотреть альтернативу. |
| Автор: sergejzr 27.2.2006, 11:53 | ||
1) Да, но например на линях везде и так стоит JAVA, а на винде gcj скомпиленная прога тоже не пойдёт без cygwin'a и соотв. библиотек (GTK например). Также один jar по удобству ничуть не хуже exe. 2) А что это даёт JAVA - программисту? Какие нибудь особенные преимущества? 3) Вот это можно было бы проверить. Как там консольные приложения против графических себя ведут итд. У нас даже раздел есть "наши тесты". Вообще при современном железе разница в скорости байт/натив должна быть совсем незначительной. Настолько, что практического применения этому мизерному преимуществу в скорости не должно быть. Но это конечно надо проверить.. |
| Автор: erka 27.2.2006, 11:58 |
| Кстати, раз уж вспомнили о Swing. Кто-то тестил Java 6 + Swing? |
| Автор: Бонифаций 27.2.2006, 12:09 |
| на лиунксах мягко скажем такой зоопарк, что надеяться на поставленную java не приходится. Это может быть линк на kaffe (который совместим лишь частично) или на ту же gcj, Кроме того не все java программы работают на любых (даже сановских) jre. К примеру geronimo не переваривает 1.5, зато все шоколадно с 1.4.2, так что все равно приходится ставит jre которая нужна. gcj на windows обычно на основе mingw, и соотвественно не нужны ему никакие cygwin dll для работы. Один .exe файл. Все остальное линкуется статически |
| Автор: batigoal 27.2.2006, 12:59 | ||
К слову, в JVM встроен JIT-компилятор, преобразующий программу при первом обращении в нативный код, и по умолчанию он включен (это не значит, конечно, что преобразование будет сделано обязательно). |
| Автор: sergejzr 4.3.2006, 03:45 | ||
Это верно для консольного приложения. Для графики потребуются доп. библиотеки. Во всяком случае мне не удалось создать независимое приложение. Если у Вас получится, поделитесь пожалуйста опытом и ексешкой |