Я много раз слышал, что Java реализует JIT (своевременная) компиляция, и ее байт-коды, которые являются портативными через платформы, "интерпретируются" JVM. Однако я действительно не знаю то, что байт-коды, и что JVM на самом деле означают в архитектуре языка Java; я хотел бы знать больше о них.
Канал связи уже установлен к моменту входа протокола WebSocket в сцену. WebSocket построен поверх TCP и HTTP, поэтому вам не нужно заботиться о том, что уже сделано этими протоколами, включая прокси.
Когда соединение WebSocket установлено, оно всегда начинается с соединения HTTP/TCP, которое позже «обновляется» во время фазы «квитирования» WebSocket. В это время туннель создан так, что доверенные лица прозрачны, нет необходимости заботиться о них.
-121--1419362- Вместо метода BeginAnimation
можно использовать раскадровку
с завершенным событием. Вот пример, устанавливающий непрозрачность, но это то же понятие:
DoubleAnimation animation = new DoubleAnimation(0.0, new Duration(TimeSpan.FromSeconds(1.0)));
Storyboard board = new Storyboard();
board.Children.Add(animation);
Storyboard.SetTarget(animation, MyButton);
Storyboard.SetTargetProperty(animation, new PropertyPath("(Opacity)"));
board.Completed += delegate
{
MessageBox.Show("DONE!");
};
board.Begin();
-121--4043404- JVM ( Виртуальная машина Java) имеет набор команд, как и реальная машина. Имя этого набора команд - Java Bytecode. Он описан в Спецификации виртуальной машины Java . Другие языки переводятся в байт-код перед исполнением, например рубин и питон. Байт-код Java находится на довольно низком уровне, в то время как байт-код python намного выше.
Интерпретация и компиляция JIT являются двумя различными стратегиями для выполнения байт-кода. Интерпретация обрабатывает байт-коды по одному, внося изменения в состояние виртуальной машины, которые кодируются в каждой команде. Компиляция JIT преобразует байт-код в команды, собственные для платформы хоста, которые выполняют эквивалентные операции.
Интерпретация обычно быстро начинается, но медленно во время выполнения, в то время как JIT имеет больше затрат на запуск, но работает быстрее после этого. Современные JVM используют комбинацию методов интерпретации и JIT, чтобы получить пользу от обоих. Байт-код сначала интерпретируется, в то время как JIT переводит его в фоновом режиме. После завершения компиляции JIT JVM переключается на использование этого кода вместо интерпретатора. Иногда компиляция JIT может дать лучшие результаты, чем компиляция с опережением времени, используемая для C и C++, поскольку она более динамична. JVM может отслеживать, как часто вызывается код и каковы типичные пути через код, и использовать эту информацию для создания более эффективного кода во время работы программы. JVM может переключаться на этот новый код так же, как при первоначальном переключении с интерпретатора на код JIT.
Как и другие языки, которые компилируются в собственный код, например C, C++, Fortran; существуют компиляторы для других языков, выводящие байт-код JVM. Одним из примеров является язык scala. Я считаю, что groovy и jruby также могут преобразовать в байт-код Java.
Байт-код - это шаг между исходным кодом и фактическим машинным кодом. JVM - это то, что берет байт-код и переводит его в машинный код.
JIT относится к тому факту, что JVM выполняет это преобразование «на лету», когда программа выполняется, а не за один шаг (как в традиционно компилируемом / связанном языке, таком как C или C ++).
Точка байт-кода заключается в том, что вы получаете лучшую производительность, чем строго интерпретируемый язык (например, PHP), потому что байт-код уже частично скомпилирован и оптимизирован. Кроме того, поскольку байт-код не должен напрямую интерпретироваться ЦП, его не нужно связывать с какой-либо конкретной архитектурой ЦП, что делает его более переносимым.
Недостатком, конечно же, является то, что оно, как правило, будет немного медленнее, чем приложение, скомпилированное в собственном коде, поскольку JVM все еще должна проделать некоторую работу по преобразованию байт-кода в машинный код.
Когда вы что-то компилируете на Java, компилятор генерирует байт-код. Это собственный код виртуальной машины Java. Затем JVM переводит байт-код в собственный код для вашего процессора / архитектуры, здесь и происходит JIT. Без JIT JVM будет транслировать программу по одной инструкции за раз, что очень медленно.
Байт-код - это JVM-эквивалент инструкций машинного языка.
jcyang уже предоставил ссылку на википедию, но эта лучше соответствует вашему вопросу:
Компилятор Java компилирует исходный код Java в файлы классов. Методы класса транслируются в байтовый код, и виртуальная машина Java (JVM) интерпретирует этот байтовый код. Компилятор Just In Time (JIT) может использоваться для преобразования байтового кода в машинный код для ускорения выполнения методов класса.