Java - это нечто среднее между скомпилированным и интерпретируемым языком.
Когда Java-программа скомпилирована, исходный код Java преобразуется в независимый от формы байт-код. Этот байт-код не является удобочитаемым человеком (он очень похож на ассемблер) и не читается большинством процессоров.
Когда скомпилированная программа запущена, этот байт-код интерпретируется виртуальной машиной Java и преобразуется в собственные инструкции для платформы, на которой работает JVM.
Что касается производительности, этот метод имеет как недостатки, так и преимущества перед компиляцией на собственный машинный код.
Недостатком является то, что перевод на машинный код требует времени. Это нужно делать либо при первом запуске приложения (что приводит к более медленному времени запуска), так и при его выполнении (что приводит к снижению производительности во время выполнения).
Но, с другой стороны, компиляция во время выполнения позволяет оптимизировать сгенерированный машинный код для платформы, на которой фактически работает программное обеспечение, в то время как предварительно скомпилированное программное обеспечение обычно оптимизировано для конкретного процессора. Компиляция во время выполнения также позволяет оптимизировать «Just-In-Time-Optimization». В то время как обычный компилятор должен угадать, какие части программы выполняются чаще всего, оптимизатор JIT может смотреть программу во время ее фактического выполнения и использовать эту информацию, чтобы изменить программу, чтобы быть более эффективной во время ее работы.
Да и нет: http://en.wikipedia.org/wiki/Java_virtual_machine Bytecode - это промежуточный язык http://en.wikipedia.org/wiki/Intermediate_language – tom
Уверен, что на этот вопрос был дан ответ несколько раз, один раз в течение последнего месяца, но я не могу найти ссылку. –
Возможный дубликат [Является ли Java составленным или интерпретированным языком программирования?] (Http://stackoverflow.com/questions/1326071/is-java-a-compiled-or-an-interpreted-programming-language) –