Как JVM и CLR знают, когда начать - PullRequest
3 голосов
/ 14 июня 2011

Просто интересно, будет ли кто-нибудь достаточно любезен, чтобы объяснить мне, как JVM, CLR и другие «Виртуальные машины» знают, когда «пнуть»?

Под этим я имею в виду, что вы дважды щелкаете по своему исполняемому файлу, и ваша машина начинает выполнять код, но в какой-то момент - очевидно, - код должен проинформировать машину о том, что этот код требует какого-то другого процесса для работы и долженпередать в оп код.Так как же это происходит?

Ответы [ 3 ]

4 голосов
/ 14 июня 2011

Каждый исполняемый файл сначала запускает неуправляемый код, который передает управление, например, в CLR (вызывает _CorExeMain из mscoree.dll).Затем CLR (неуправляемая вещь) читает / компилирует / выполняет код (и выполняет другие действия) внутри вашей сборки.

1 голос
/ 14 июня 2011

В программах .net в исполняемом файле есть своего рода загрузчик, запускающий CLR.Этот загрузчик написан на собственном машинном коде, поэтому его можно запускать напрямую.За ним следует управляемый код и дополнительные ресурсы приложения, которые затем используются CLR для выполнения программы .net.

Посмотрите на JVM, и это может быть более понятно.У вас есть несколько файлов .class, которые передаются в java.exe.Эти файлы .class содержат байт-код Java и не могут быть выполнены напрямую двойным щелчком по нему.Также .jar-файл - это просто zip-файл с .class и другими файлами в нем.Расширение файла .jar сопоставляется с java.exe, и при двойном щелчке по нему java.exe выполняется с файлом .jar в качестве параметра - тот же процесс, что и при двойном щелчке по файлу Word .doc и запускается Word.

0 голосов
/ 14 июня 2011

Это в некоторой степени зависит от операционной системы.В Linux вы не можете запустить Java-программу, просто сказав имя Java-программы, вы обычно делаете Java.Я не запускал никаких двоичных файлов CLR, но я предполагаю, что это то же самое.В Windows (и для таких вещей, как файлы Jar) в Windows есть обработчик, который говорит что-то вроде «когда пользователь открывает файл, заканчивающийся на .jar, запустить java» и аналогичный для двоичных файлов .net.

...