Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Оптимизация промежуточного кода в java

10K
03 декабря 2010 года
Shalfey
47 / / 10.03.2007
Мне нужна конкретная информация по данным вопросам. Гугл буквально заваливает информацией, но пока всё мимо. Можно на английсом. Вопросы таковы:

1. На каких этапах работы/трансляции java программы происходит её оптимизация?
2. Каким образом происходит оптимизация байт-кода java? Что, когда и особенно как (какие методы использованы) её выполняет?
3. Теория оптимизации промежуточного кода вообще. Платформа не важна.

Меня не интересуют всякие фреймворки по оптимизации/протекции/обфускации, интересует именно работа стандартных средств - jvm, jit.
Прежде всего интересуют советы людей, которые задавались подобными вопросами и исследовали их. Приветствуются ссылки на официальную документацию. Я понимаю, что копаясь, скажем, в jvm specification, можно найти ответы на некоторые вопросы. Это я собственно говоря сейчас и делаю, но процесс долгий и сложный, потому и прошу совета матёрых джавистов.
63
03 декабря 2010 года
Zorkus
2.6K / / 04.11.2006
Цитата: Shalfey

1. На каких этапах работы/трансляции java программы происходит её оптимизация?


Как ты знаешь, современная среда Java используют двухшаговую компиляцию. Сначала .java файлы компилятся в байткод (.class), и некоторая базовая оптимизация выполняется на этой стадии. Затем байткод загружается в виртуальную машину, где и исполняется. В свою очередь, исполнение байткод происходит так. Сначала все методы (весь код) выполняются в интерпретируемом режиме. После того, как метод был вызван определенное число раз (порядка 1500-1000 раз обычно), в дело вступает JIT компилятор, который компилирует байткод в машинный код для конкретной платформы, и вот тут уже доступно большое число дополнительных оптимизаций. Гугли по словам jvm hotspot adaptive optimization.

Цитата: Shalfey

2. Каким образом происходит оптимизация байт-кода java? Что, когда и особенно как (какие методы использованы) её выполняет?


Есть два типа JIT компиляторов, cliend and server. Первый заточен под приложения, которым важна легковестность и быстрый старт программы. Он работает быстрее, но генерит в итоге менее оптимальный машинный код.

Второй соответственно предназначен для тяжелых приложений типа серверов приложений и прочего middleware (+ монстры типа эклипса:)), которым пофиг на скорость старта (умеренно) но важна оптимальность генерируемого код.

Использует такие приемы оптимизации, как escape-анализ, biased locks, locls coarsening locks elision и прочее.

Вот хорошая презентация по оптимизации(кстати, метода оптимизации свои под каждую реализацию JVM, все что я говорю относится в основном к Hotspot JVM).
http://conference.javatalks.ru/data/JVMTalk.pdf

Вот хорошая подборка - http://www.oracle.com/technetwork/java/javase/tech/index-jsp-136373.html.

Вообще, встречаются так же оптимизации, которые напрямую к байткоду не относятся, и о которых довольно мало кто знает. Например - class data sharing.

Цитата: Shalfey

3. Теория оптимизации промежуточного кода вообще. Платформа не важна.


Общие методики оптимизации виртуальных машин - сложный вопрос, не копался. Но это хороший вопрос! А откуда он у тебя - просто интерес, или хочешь сделать свою реализацию какой то виртуальной машины?

5
04 декабря 2010 года
hardcase
4.5K / / 09.08.2005
Цитата: Zorkus
Общие методики оптимизации виртуальных машин - сложный вопрос, не копался. Но это хороший вопрос! А откуда он у тебя - просто интерес, или хочешь сделать свою реализацию какой то виртуальной машины?


В последней редакции Книги (Пурпурного) Дракона есть глава, посвященная виртуальным машинам, я думаю вам стоит с ней ознакомиться.

5
04 декабря 2010 года
hardcase
4.5K / / 09.08.2005
Кстати, была обзорная статья по тому что и как оптимизируется JIT-ом в .NET 1.1.
63
04 декабря 2010 года
Zorkus
2.6K / / 04.11.2006
Цитата: hardcase
В последней редакции Книги (Пурпурного) Дракона есть глава, посвященная виртуальным машинам, я думаю вам стоит с ней ознакомиться.


Последнее - это второе, что ли? http://www.ozon.ru/context/detail/id/3829076/ ?

5
04 декабря 2010 года
hardcase
4.5K / / 09.08.2005
Цитата: Zorkus
Последнее - это второе, что ли? http://www.ozon.ru/context/detail/id/3829076/ ?


Хз откуда там считают. ЕМНИП, есть три книги - с зеленым, красным и пурпурным драконами. Зеленая - это вообще самая первая, если она не выходила на русском языке, то логично что с пурпурным драконом - это второе издание.

10K
30 декабря 2010 года
Shalfey
47 / / 10.03.2007
Спасибо огромное всем, что откликнулись.
Вы спрашивали, как я заинтересовался этой темой. Всё просто: в университете у нас есть курс "Проектирование системных программ". Я решил взять на курсовой не стандартную тему из методичек начала 90-х годов, а именно "Оптимизацию промежуточного кода в java". В университете этим вроде никто не занимается. Преподаватель сказал, что если материал будет хороший, то она включит его хотя бы частично в программу курса. Мне, как человеку знакомому лишь с С++, тема тоже интересна.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог