motofan logo
> 

Перекомпиляция J2ME в Native, Теорию обсудили. Кто-бы еще реализовал.

DmT
сообщение 19.3.2010, 13:45


Мото-Портной
******

Группа: Разработчики
Сообщений: 1 175
Регистрация: 31.3.2007
Пользователь №: 129 181
Модель телефона: LG GW620, L7e и др.
Победитель конкурса 2008

Рейтинг: 680



Для чего перекомпилировать Java в Elf:
Как работают большинство виртуальных машин на стадии выполнения кода: загружают код методов класса, и затем из него создают новый код, машинный(нативный). Это называется JIT(Just in time) компиляция. То есть байт-код переводится в нативный код. Ну а нативный код уже выполняется процессором реальной машины.
Но есть и другой вариант: байт-код НЕ переводится в машинный код. Вместо этого при выполнении каждой инструкции байт-кода вызывается функция-обработчик. Это называется интерпритацией.
Интерпритация намного медленнее JIT компиляции, но при этом требует намного меньше памяти, что актуально во встраиваемых системах, типа телефона.

Смысл java to elf в том, что ресурсоемкий процесс JIT компиляции будет производиться ЗАРАНЕЕ, то есть на компьютере. Ну и по сути это уже не "JIT" а "перекомпиляция".

Если до сих пор не поняли... Речь не идет о языках программирования, в частности Java или С. То есть для того о чем мы говорим нам не нужны исходные коды приложения, которое мы будем перекомпилировать. Нам нужен конечный продукт - архив jar, внитри которого набор классов.
JAR -> j2elf -> ELF

Одноко конкретно мало кто представляет, что же из себу представляет перекомпиляция. Даже про себя могу сказать, что хоть я и неплохо ориентируюсь в этом, до конца не представляю весь механизм перекомпиляции.
Уважаемые разработчики, предлагаю это обсудить. А может быть даже кто-то возьмется реализовывать.

У JVM инструкций около 200.
JVM - стек-ориентированная, ARM - регистр-ориентированная.
Ну с этим я полагаю справиться можно.
Далее зоны с вероятными исключениями: на яве указываются ввиде таблицы. На ARM вот уж не знаю как.(?)
Все поля класса вынесены в отдельную область class файла. Методы - соответственно тоже, причем методы разделены, а это частично избавляет нас от гемора с импортами/экспортами.
Еще одна проблема - сборщик мусора(далее GC). Он должен проверять все ссылки на объекты и сверять с множеством изначальных объектов. Если на какой-либо объект более не существует ссылки в памяти - удалять этот объект. На словах просто, а на деле не очень. Не могу четко представить механизм перебора и отсеивания ссылок в стеке (отсеивание нужно, чтобы не перепутать объекты и примитивы(ведь значение ссылки объекта запросто может совпасть со значением примитива)). То есть тут либо как то по особенному организовывать сам стек(вводит идентификатор типа перед значением), либо хранить в GC множество указателей на ссылки на объекты, либо ...?
Еще есть такая вещь как наследование(в купе с полиморфизмом и т.д. Жду ваших предложений.

Обратить внимание на красные вопросы.

Сообщение отредактировал DmT - 25.4.2010, 8:14
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
 
Ответ в темуСоздание новой темы
Ответов
DmT
сообщение 16.5.2010, 17:40


Мото-Портной
******

Группа: Разработчики
Сообщений: 1 175
Регистрация: 31.3.2007
Пользователь №: 129 181
Модель телефона: LG GW620, L7e и др.
Победитель конкурса 2008

Рейтинг: 680



Спасибо motoprogger за находку:
http://gcc.gnu.org/java/
GCJ is a portable, optimizing, ahead-of-time compiler for the Java Programming Language. It can compile Java source code to Java bytecode (class files) or directly to native machine code, and Java bytecode to native machine code.
Compiled applications are linked with the GCJ runtime, libgcj, which provides the core class libraries, a garbage collector, and a bytecode interpreter. libgcj can dynamically load and interpret class files, resulting in mixed compiled/interpreted applications. It has been merged with GNU Classpath and supports most of the 1.4 libraries plus some 1.5 additions.

GCJ работает с arm, cобирает в ELF формат.

Посути большую часть того, что необходимо сделать уже реализовано в этом проекте. Нам осталось только собрать libgcj для нашей платформы. И добавить в EP2 совместимость с этими эльфами.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить

Сообщений в этой теме
DmT   Перекомпиляция J2ME в Native   19.3.2010, 13:45
motoprogger   Применительно к ARM - даже примерно не понимаю, о...   19.3.2010, 15:43
DmT   Речь о том, как будет выглядеть на ARM конструкци...   19.3.2010, 16:00
motoprogger   По входу в try в отдельный стек - стек исключений...   19.3.2010, 16:42
Andy51   DmT, закончил бы ты сначала эмуль эльфов..   19.3.2010, 20:05
baat   Andy51, зачем меня цитировать? :)   19.3.2010, 21:32
Fenja   Думаю надо. Ява ООП, а С функциональное? И получи...   20.3.2010, 7:25
DmT   Так, чтобы прояснить ситуацию: Я (я - это такой ч...   20.3.2010, 8:25
baat   Fenja, ну на еп2 so есть допустим, не обязательно ...   20.3.2010, 8:28
DmT   А. Хорошо. Раз уже не перввый человек введен в за...   20.3.2010, 8:50
motoprogger   По сути это не JIT, а AOT ; ) Предположим, само...   20.3.2010, 16:54
DmT   Пожалуй да. Конкретнее в чем проблема? Интересн...   22.3.2010, 7:17
DmT   Спасибо motoprogger за находку: http://gcc.gnu.org...   16.5.2010, 17:40
Andy51   DmT, я так полагаю, что проблема "всего лишь...   16.5.2010, 19:00
G-XaD   Перечитал первый пост, но так и не нашел ответа на...   16.5.2010, 19:06
baat   G-XaD, скорость и многозадачность...   16.5.2010, 19:20
motoprogger   Не надо его туда переписывать. При чём здесь вооб...   16.5.2010, 19:20
G-XaD   Думаю, размер эльфа + libgcj на выходе будет слиш...   16.5.2010, 19:37
motoprogger   Я именно про различие в работе эльфов и Java-прил...   16.5.2010, 19:56
baat   motoprogger, вопрос, а смогут ли два таких эльфа-я...   16.5.2010, 20:23
Andy51   Я подозреваю, что результирующий код строится по ...   16.5.2010, 20:24
DmT   Да не так уж трудно и добавить поддержку импортов...   16.5.2010, 20:35
motoprogger   Проблема со статическими объектами, подозреваю, б...   16.5.2010, 20:50
CrayZor   Портировал кто бы qt либы чем думат как перегонят ...   18.5.2010, 14:43
DarkCoder   У нас же на телефоне ОС основана на событиях. И ка...   18.5.2010, 15:02
Fenja   :shok: зачем?   18.5.2010, 15:19
CrayZor   Портироват проги просто под эту либы...   18.5.2010, 15:37
motoprogger   Я, конечно, не очень в теме, но вроде у нас пробе...   18.5.2010, 15:41
DarkCoder   Я таких в живую не видел, но ... В проекте Andy5...   18.5.2010, 17:44
Andy51   CrayZor, :poster_offtopic: Тогда это уже задача...   18.5.2010, 22:45
motoprogger   Кстати, нашёл ещё одну интересную вещь: http://jcv...   23.5.2010, 14:57
DarkCoder   Это что уже схема испытывалась на телефоне?   23.5.2010, 15:35
DmT   Ты абсолютно не разбираешься в предметнойй област...   23.5.2010, 15:49
motoprogger   Эм, в яве есть какой-то фиксированный набор класс...   23.5.2010, 15:53
DmT   это можно сделать из эльфа прошивки E1   23.5.2010, 15:56
DarkCoder   Конечно не разбираюсь. просто я i386 попутал с E3...   23.5.2010, 16:32
motoprogger   Там J2ME классы могут быть немного иначе, по срав...   23.5.2010, 16:38
DmT   Сомневаюсь, но даже если это так, можно попробова...   23.5.2010, 16:54
Andy51   DmT, ау, а про Медузу уже забыли? Проект Медуза   23.5.2010, 22:57
DmT   Andy51, Ну, мое последнее сообщение там смотри. К...   1.6.2010, 17:31

Перекомпиляция J2ME в Native, Теорию обсудили. Кто-бы еще реализовал. · Эльфы, их разработка и портирование · Forum
 

Ответ в темуСоздание новой темы
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 14.7.2025, 9:39

Форум живёт: