![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
||
|
Sardar |
|
||||||||||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 4 Всего: 317 |
Дык это же целое или я чего то не понял ? ![]()
Задача компилятора генерить оптимальный код(не путать с оптимизированным), это должно быть по опредлению. Выигрышь будет хороший если подобным образом будет экономится память в тысячах методов ![]()
А что если я не сгенерю(не Sun Java SDK) инициализатор предка/Object? Вроде как с памятью и всё такое проблему будут...
Видим противоречие... Стек становится массивом, не копируется, ни на какой платформе не копируется, иначе прога будет исполнятся годами ![]() Аппаратно х86(да и другие) поддерживают бег с индексом в стеке, иначе это бесполезный в обычной жизни стек(мы же не теоретики). Значит по стеку можно бегать, так зачем при вычислениях эти "туды-сюды"? -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
||||||||||
|
|||||||||||
Domestic Cat |
|
||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
я к тому, чтo в Java long/long = long, что делается опкодом ldiv. Такое деление быстрее.
Дык ведь это автоматичскиe переменные, когдa метод завершется, они выбрасываются. ![]()
А я развe где-тo писаl, что копируется ![]()
Но ведь JVM - это абстрактная, кроссплатформенная машина ![]() -------------------- |
||||||||
|
|||||||||
polosatij |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 22.2.2004 Где: Stuttgart<-> ;Karlsruhe, Germany Репутация: 1 Всего: 8 |
Domestic Cat, ты не мог бы обьяснить.. (либо я просто где-то что-то упустил) хм.. чего-то я недопонял ![]() как это седьмой элемент и 3 байта? ссылка на адрес в памяти? что занимает 3 байта ![]() Это сообщение отредактировал(а) polosatij - 29.11.2004, 21:26 |
|||
|
||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
Код метода записывается в виде массива, индексы которого в дизассемблированном коде стоят слева:
В этом массиве записаны те самые инструкции что tы видишь здесь, точнее иx эвиваленты - числа типa byte. Напримeр invokespecial = 183 (0xb7), сидiт в ячейкe массива 1. Поскольку у него ест' аргумent, тo вся инструкция займet 3 байтa: 183, 0, 1, .... -------------------- |
|||
|
||||
Domestic Cat |
|
||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
Играем с байткодом, или BCEL
BCEL - Byte Code Engeneering Library - проект Apache, который позволяет относительно просто работать с байткодом: создавать, удалять, редактировать методы в класс файлах, менять констант пул, добавлять/убирать поля, менять наследование, в общем, делать с байткодом практически все что угодно - и делать все это динамически. Кроме того, он содержит ряд полезных утилит. Например, Class2HTML позволяет просмотреть байткод класса в HTML формате:
BCELifier перегоняет класс в java-файл, который при запуске сгенерировал бы такой класс-файл.
Пример. Есть простенкий код:
который выводит в консоль слово Hello. Предположим мы его скомпилировали, а сорец удалили. С помощью BCEL в этом файле я удаляю метод printIt и заменяю его на метод printIt, выдающий в консоль Hello from Domestic Cat:
(Программа перезапишет исходный класс! ). Оба сорца в аттачменте. Это сообщение отредактировал(а) Domestic Cat - 29.11.2004, 22:27 Присоединённый файл ( Кол-во скачиваний: 8 ) ![]() -------------------- |
||||||||
|
|||||||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
Я че хочу спросить: стоит ли продолжать? Большую часть инфы можно почерпнуть из спецификации, а тут довольно сумбурно получается.
-------------------- |
|||
|
||||
Sleepy_PIP |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 512 Регистрация: 30.6.2004 Где: Moscow Репутация: 4 Всего: 12 |
мое мнение - очень важная тема и интересно изложена. т.е. продолжать по возможности надо ... Спасибо! -------------------- -- Sleepy_PIP. Pavel Pryazhentsev (ex. 2:5020/141) "... Лучше быть нужным, чем свободным ..." |
|||
|
||||
Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 4 Всего: 317 |
Domestic Cat если есть время, то продолжай, интересно. Сам я пока в спецификацию не полезу, другим занят
![]() -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
Sleepy_PIP |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 512 Регистрация: 30.6.2004 Где: Moscow Репутация: 4 Всего: 12 |
кстати - из этой публикации и вопросов может получится не плохая статься в журналы, если автор до этого снизойдет ![]() -------------------- -- Sleepy_PIP. Pavel Pryazhentsev (ex. 2:5020/141) "... Лучше быть нужным, чем свободным ..." |
||||
|
|||||
polosatij |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 22.2.2004 Где: Stuttgart<-> ;Karlsruhe, Germany Репутация: 1 Всего: 8 |
я за ![]() ![]() скажи, откуда ты взял полную спецификацию кодов? например: dup - создается дубликат на стеке ![]() |
|||
|
||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
В той же спецификации: http://java.sun.com/docs/books/vmspec/2nd-...tions2.doc.html Ок, в таком случае я продолжу - про то. как компилятся различые структуры в байткод. Я начну с того что есть в спеке, а затем перейду к внутренним классам и Java 5.0. Только делать я смогу это из дома ![]() -------------------- |
|||
|
||||
polosatij |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 22.2.2004 Где: Stuttgart<-> ;Karlsruhe, Germany Репутация: 1 Всего: 8 |
пасиба ![]() декомпилировал несколько классов и увидел (к примеру) следующий bytecode: 10: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream; 13: aload_1 14: invokevirtual #7; //Method test:()I 17: invokevirtual #8; //Method java/io/PrintStream.println:(I)V 20: nop 21: return 1.ты не скажешь, зачем nop? в спецификации: Do nothing зачем терять байты? 2. возможна ли обратная конвертация всего в класс стандартными утилитами SUN ? |
|||
|
||||
Domestic Cat |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
А можно java код посмотреть? ![]()
Для этого есть декомпиляторы, их можн найти тут: http://www.thefreecountry.com/programming/javatools.shtml Немного не о декомпиляции, но зато забавнo: Jamaica -------------------- |
||||
|
|||||
polosatij |
|
||||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 22.2.2004 Где: Stuttgart<-> ;Karlsruhe, Germany Репутация: 1 Всего: 8 |
фууф.. документацией закидал ![]() ![]() |
||||||||
|
|||||||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
А какая у тебя JDK? 1.4.03 выдает вот что:
-------------------- |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |