Возможно, хочется странного (а возможно, не докурил маны по Java). В общем, нет ли такой штуки, чтобы взять программу скомпилированную под JVM или .NET и преобразовать ее в бинарник (не обязательно виндовый), который может запускаться в среде без виртуальной машины? Фактически, хочу прикрепить JIT компилятор прямо к своей программе. Если есть возможность это сделать, не в курсе ли вы, насколько в таком случае увеличивается размер программы?
Не у всех установлена JVM или .NET. Было бы неплохо иметь возможность распространять программу в двух вариантах — простой бинарник и версия для тех, у кого есть виртуальная машина. Кажется, некоторые пользователи чисто психологически могут отказаться от программы, если для ее установки нужно скачивать еще что-то.
Есть gcj, есть еще куча ahead-of-time компиляторов. Но нужно понимать что все равно нужно таскать с собой полноценный рантайм с jit (или на крайний случай интерпретатором) + стандартную библиотеку. Jit (или интерпретатор) нужен потому что можно подгружать классы динамически.
Простенькое консольное приложение скомпиленное gcj со слинкованным рантаймом будет весить несколько десятков метров. Если же не линковать рантайм в бинарник, то разницы с обычным jvm в приницпе нет… и то и то должно стоять в системе отдельно.
К тому же последний раз когда я в этом копался поддержка java была не полная. Не знаю как ситуации сейчас, но думаю не лучше, учитывая что gcj уже пару лет не обновляли.
Таак, а если я пишу не на Java, но компилирую программу в JVM (например, как это делает Scala), я так понимаю ее потом с помощью gcj в бинарник не превратить? Что в этом случае посоветуете?