motofan logo
> 

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

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


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

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


Настроение:
Второй год подряд решаю мир. Решения не найдено.



Рейтинг: 669



Для чего перекомпилировать 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
сообщение 1.6.2010, 17:31


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

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


Настроение:
Второй год подряд решаю мир. Решения не найдено.



Рейтинг: 669



Andy51,
Ну, мое последнее сообщение там смотри. Как раз об этом и написано.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить

Сообщений в этой теме
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

 



Текстовая версия Сейчас: 21.5.2024, 23:32

Форум живёт: