Как правило, компилятор Java может / делает некоторые полезные оптимизации для создания кода JVM. Компилятор JIT в JVM затем выполняет больше оптимизаций, поскольку генерирует машинный код. Поскольку оба они являются автоматическими и невидимыми для вас, вы этого не замечаете, но вам не нужно делать это явно.
Всегда есть преобразования, которые могут быть выполнены в контексте вашей программы, которые Java-компилятор и JIT-компилятор не могут знать. Для этого в идеале вам нужна какая-то система преобразования исходного кода , которая может считывать исходный код, анализировать его в какой-то внутренней структуре инструмента (обычно AST), применять «невероятные синтаксические преобразования». ", который вы определяете для этой внутренней структуры, а затем восстанавливаете исходный код на своем языке.
Наш инструментарий реинжиниринга программного обеспечения DMS (коммерческий) является таким движком; он обрабатывает много языков. DMS имеет интерфейс Java 1.6 , который создает полные таблицы символов и обеспечивает анализ управления и потока данных, необходимые для более сложных преобразований.
Бесплатные альтернативы (университетские исследования): Stratego и TXL , оба из которых имеют анализаторы Java некоторой (неизвестной мне) зрелости, но определенно не предоставляют таблицы символов или какие-либо анализ потоков, то есть вы сами должны построить это или плохое приближение. Есть люди, которые могут предложить ANTLR , который также имеет внешний интерфейс Java, вероятно, создает AST, очень вероятно, не создает таблицы символов и не предоставляет остальную часть механизма, которую делают типичные системы преобразования ( преобразования источника в источник, восстановление исходного текста и т. д.)
Если вы довольны тем, что делает компилятор Java, вам это не нужно. Если этого недостаточно, то вы хотите что-то подобное. [Тот факт, что вы задали вопрос, наводит на мысль, что у вас есть представление о том, что вы хотите сделать, чего не делает компилятор Java. Хотите уточнить?]