Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Java – это интерпретируемый язык.




Java – это интерпретируемый язык.

(Интерпретируемость. Исходный код Java-приложений преобразуется компилятором в так называемый байт-код, исполняемый виртуальной машиной в режиме интерпретации. Java использует так называемое очень позднее связывание, которое начинается непосредственно перед исполнением. Еще одна характерная особенность: при создании байт-кода компилятор не определяет адресов и размеров объектов в памяти. Связывание имен и настройку адресов в оперативной памяти осуществляет виртуальная машина, которая, кстати, может изменить настройку на конкретные адреса, если сочтет это нужным, приложения же ни о каких изменениях догадываться не будут. )

Вы пишете код (не важно где), затем вы в этой среде или в командной строке вы его компилируете и что вы получаете на выходе? Байт-код. Почему такое странное название? Все очень просто. Потому что инструкции там однобайтовые. Каждая команда составляет один байт. 256 разных комбинаций, соответственно все инструкции можно было в этот 1 байт поместить. Поэтому на выходе получается компактный байт код. Но после компиляции, то, что вы относите клиенту – это именно байт-код.

Вопрос: Что происходит на машине клиента?

Ответ: Не знаю, каким образом он запускает программу, но современный интерфейс предполагает двойной щелчок по ярлыку. Есть даже такие варианты. Но более классический вариант подразумевает то, что пользователь берет командную строку и говорит, что хочет запустить такую-то программу. При этом он указывает, что должна быть запущена программа в виртуальной машине. И эта виртуальная машина загружает (будучи загруженной первой, конечно же) байт-код в оперативную память, читает инструкцию, а потом выполняет, читает инструкцию и потом выполняет. И так до конца. И что мы имеем? Конечно же, интерпретацию.

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

 

Вопрос: Вы рады, что это интерпретация? Или у вас есть какие-то сомнения с тем, что это интерпретируемый язык?

Ответ: Можно в принципе порадоваться, т. к. проблема низкой скорости интерпретации решена успешно на столько на сколько это возможно. Зато есть гигантские плюсы:

· это платформо-независимый язык программирования, т. к. я пишу не для платформы, а для виртуальной машины. Идея очень грамотная.

· представьте себе класс на C++ «Сотрудник». Вы его написали, откомпилировали, создали dll и раздали всем. Все ваши партнеры пользуются вашим классом, благодаря вашему классу они написали кучу софта. А потом вы берете, и в этот класс добавляете еще одну переменную. Что произойдет? Вы естественно изменили текст, откомпилировали, опять раздали коллегам dll.  Они старую dll заменили на новую. Имя то же самое, имя класса то же самое. И теперь вопрос: А их код, который они за предыдущие 5 лет написали он будет работать или его нужно перекомпилировать, если мы пишем на C++? Ответ однозначный: Весь этот код нужно будет перекомпилировать, потому что изменился размер объекта. Когда мы в клиентской программе пишем имя класса и имя объекта, то компилятор C++ вставляет туда количество памяти, сколько необходимо выделить. Вы что-то изменили, соответственно, стало больше, а у них в программе написаны предыдущие значения. И когда их программа начнет работать, то получится следующая вещь: выделяется памяти меньше, а объект больше. Это все однозначно рухнет.

А что мы имеем в Java? А здесь этой проблемы нет. Вы написали новый вариант, и вы этот новый вариант положили на сервер. Виртуальная машина всегда берет, загружает байт-код и начинает его интерпретировать. Она всегда берет последнюю версию. У клиента в байт-коде написано создай такой-то объект. В виртуальной машине все происходит, поэтому она всегда, за счет своего чтения и исполнения байт-кода, все последние версии легко подхватывает и учитывает.

Еще один очень важный момент: ЯП Java – надежный.

(Надежность. Язык строго типизирован, стало быть, значительная часть ошибок может быть выявлена на стадии компиляции. Конструкции C++, предшественника Java, которые порой сбивали программистов с толку, в новый язык не вошли. Возможности для контроля приложений на стадии исполнения (переполнение стека, отслеживание границ массивов, поиск резервов для оптимизации и др. ) стали обязательным элементом средств разработки. )

Здесь можно было бы вспомнить и про утечку памяти, но другие моменты, связанные с надежностью – это хорошо продуманный механизм обработки исключений. Он отличается от того, что придумано в C++ в лучшую сторону. Про них мы будем говорить в среду.

Также здесь сделали потоки, многозадачность и т. д. Это очень удобно для написания серверного кода, т. к. код должен быть не просто надежным, но и производительным. Но если я начну это решать самостоятельно, то начнутся проблемы. Когда у нас будет Java2, то там я сразу задам вопрос: «А вы занимались многопотоковым программированием? » 1 из 10 говорит «Да». Поэтому, если мы с вами начнем писать многопотоковый код, то мягко говоря, это будет детской подделкой, а не многопотоковый код, который можно будет выложить на сервер. Это ни к чему хорошему не приведет. Ваш сервер просто рухнет. Поэтому если проблема решена на уровне библиотеки классов, вам уже предлагают здесь специальные элементы многозадачности и многопотоковости, которые писали профессионалы 20 лет. А это уже о чем-то говорит.

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...