В настоящее время я работаю над компилятором из пользовательского DSL на Java, одновременно выполняя некоторые оптимизации производительности в процессе. Моя самая большая проблема заключается в том, что не существует академических ресурсов, которые можно найти о том, что JIT-компиляторы будут делать в отношении оптимизации (проходов) или в какой степени они это сделают (например, комплексный отказ от мертвого кода, см. Пример ниже). Есть много сообщений в блогах, в которых JIT-Compilers не будет делать все оптимизации, которые AOT-Compiler сделает из-за определенных ограничений по времени, но никто не упоминает, что это на самом деле означает. Есть общее правило? Нужно ли мне погружаться в, например, источник OpenJDK C++, чтобы понять это? Есть ли какие-либо исследования об этом? И если этого не происходит, есть ли, по крайней мере, надежный источник информации о том, какие оптимизаторы JVM JIT делают? Последние ресурсы, которые я нашел, касаются Java 5, который довольно устарел (http://www.oracle.com/technetwork/java/5-136747.html)Ограничения JVM JIT-компиляторы Оптимизация
Вот упрощенный пример сценария «сложного уничтожения мертвого кода», который я нашел, что JVM JIT не сможет устранить, учитывая переменную cells_S_S_S не используются в любом месте (имейте в виде, что это авто-генерируемый код):
List<List<List<Cell>>> cells_S_S_S = new ArrayList<>(pla_S.size());
...
for (int pla_S_itr_45 = 0; pla_S_itr_45 < pla_S_size_45; ++pla_S_itr_45) {
...
List<List<Cell>> cells_S_S = new ArrayList<>(tmpVarIf20_S.size());
for (int tmpVarIf20_S_itr_44 = 0; tmpVarIf20_S_itr_44 < tmpVarIf20_S_size_44; ++tmpVarIf20_S_itr_44) {
...
List<Cell> cells_S = _state.getCells();
...
cells_S_S.add(cells_S);
}
...
cells_S_S_S.add(cells_S_S);
}
Такого рода ,, вложенного мертвого-кода»не был устранен который мне сказал, выполняет оптимизации на моем своя.
Вкратце: я хочу знать, что JVM JIT способен на то, чтобы я мог сосредоточить свою собственную оптимизацию на правильных областях.
Возможно, эта ссылка интересна: https://wiki.openjdk.java.net/display/HotSpot/PerformanceTacticIndex (сайт вики сегодня загружается очень медленно, поэтому вы можете использовать сайты архивации). –
Спасибо за ваш вклад! К сожалению, это не помогает мне вообще, так как нет точной информации и ссылок на эту страницу. Кажется, это просто огромный черный ящик. – naze
Несмотря на то, что вопрос интересный, он не соответствует теме «Переполнение стека», поскольку он слишком широк и/или запрашивает ресурс вне сайта. – apangin