Выполнение Java-программы
Как вы знаете, программа, написанная на одном из языков высокого уровня, к которым относится и язык Java, так называемый исходный модуль ("исходник", или "сырец" на жаргоне от английского source), не может быть сразу же выполнена. Ее сначала надо скомпилировать, т. е. перевести в последовательность машинных команд — объектный модуль. Но и он, как правило, не может быть сразу же выполнен: объектный модуль надо еще скомпоновать с библиотеками использованных в модуле функций и разрешить перекрестные ссылки между секциями объектного модуля, получив в результате загрузочный модуль — полностью готовую к выполнению программу.
Исходный модуль, написанный на Java, не может избежать этих процедур, но здесь проявляется главная особенность технологии Java — программа компилируется сразу в машинные команды, но не команды какого-то конкретного процессора, а в команды так называемой виртуальной машины Java (Java Virtual Machine, JVM). Виртуальная машина Java — это совокупность команд вместе с системой их выполнения. Для специалистов скажем, что виртуальная машина Java полностью стековая, так что не требуется сложная адресация ячеек памяти и большое количество регистров. Поэтому команды JVM короткие, большинство из них имеет длину 1 байт, отчего команды JVM называют байт-кодами (bytecodes), хотя имеются команды длиной 2 и 3 байта. Согласно статистическим исследованиям средняя длина команды составляет 1,8 байта. Полное описание команд и всей архитектуры JVM содержится в спецификации виртуальной машины Java (Virtual Machine Specification, VMS). Ознакомьтесь с этой спецификацией, если вы хотите в точности узнать, как работает виртуальная машина Java.
Другая особенность Java — все стандартные функции, вызываемые в программе, подключаются к ней только на этапе выполнения, а не включаются в байт-коды. Как говорят специалисты, происходит динамическая компоновка (dynamic binding). Это тоже сильно уменьшает объем скомпилированной программы.
Итак, на первом этапе программа, написанная на языке Java, переводится компилятором в байт-коды. Эта компиляция не зависит от типа какого-либо конкретного процессора и архитектуры конкретного компьютера. Она может быть выполнена один раз сразу же после написания программы, программу не надо перекомпилировать под разные платформы. Байт-коды записываются в одном или нескольких файлах, могут храниться во внешней памяти или передаваться по сети. Это особенно удобно благодаря небольшому размеру файлов с байт-кодами. Затем полученные в результате компиляции байткоды можно выполнять на любом компьютере, имеющем систему, реализующую JVM. При этом не важен ни тип процессора, ни архитектура компьютера. Так реализуется принцип Java "Write once, run anywhere" — "Написано однажды, выполняется где угодно".
Интерпретация байт-кодов и динамическая компоновка значительно замедляют выполнение программ. Это не имеет значения в тех ситуациях, когда байт-коды передаются по сети, сеть все равно медленнее любой интерпретации, но в других ситуациях требуется мощный и быстрый компьютер. Поэтому постоянно идет усовершенствование интерпретаторов в сторону увеличения скорости интерпретации. Разработаны JIT-компиляторы (Just-In-Time), запоминающие уже интерпретированные участки кода в машинных командах процессора и просто выполняющие эти участки при повторном обращении, например в циклах. Это значительно увеличивает скорость повторяющихся вычислений. Корпорация Sun Microsystems разработала целую технологию HotSpot и включает ее
- Введение
- Выполнение Java-программы
- Как использовать JDK?
- Литература по Java
- Аннотации
- Константы
- Целые
- Имена
- Примитивные типы данных и операции
- Операции над целыми типами
- Арифметические операции
- Сдвиги
- Упражнения
- Условная операция
- Упражнения
- Выражения
- Операторы
- Операторы цикла
- Массивы
- Принципы объектно-ориентированного программирования
- Абстракция
- Ответственность
- Упражнения
- Как описать класс и подкласс?
- Переопределение методов
- Операция new
- Упражнение
- Статические члены класса
- Вложенные классы
- Отношения "быть частью" и "являться"
- Размещение пакетов по файлам
- Перечисления
- Design patterns
- Схема проектирования MVC
- Заключение
- Вопросы для самопроверки
- Настраиваемые типы (generics)
- Класс String
- Как создать строку
- Упражнение
- Сцепление строк
- Как узнать длину строки
- Как найти символ в строке
- Упражнения
- Класс StringBuilder
- Конструкторы
- Синтаксический разбор строки
- Класс StringTokenizer
- Класс Stack
- Интерфейс Collection
- Интерфейс List
- Интерфейс Set
- Интерфейс SortedSet
- Интерфейс Queue
- Интерфейс BlockingQueue
- Интерфейс Deque
- Интерфейс Map
- Абстрактные классы-коллекции
- Интерфейс Iterator
- Классы, создающие списки
- Упражнение
- Классы, создающие отображения
- Связанные отображения
- Упорядоченные отображения
- Упражнение
- Классы, создающие множества
- Связанные множества
- Заключение
- Вопросы для самопроверки
- Получение случайных чисел
- Копирование массивов
- Использование системных приложений
- Splash Screen
- Заключение
- Вопросы для самопроверки
- Класс FontMetrics
- Преобразование координат
- Класс AffineTransform
- Вывод текста средствами Java 2D
- Упражнение
- Заключение
- Вопросы для самопроверки
- Класс Cursor
- Как создать свой курсор
- Класс Container
- События
- Текстовая метка Label
- События
- Кнопка Button
- События
- Кнопка выбора Checkbox
- События
- Класс CheckboxGroup
- События
- Строка ввода TextField
- События
- Поле ввода TextArea
- Линейка прокрутки Scrollbar
- События
- Контейнер Panel
- Контейнер Window
- События
- Контейнер Dialog
- Основные компоненты Swing
- Компонент JComponent
- Упражнение
- Счетчик JSpinner
- Упражнение
- Индикатор JProgressBar
- Дерево объектов JTree
- Построение меню средствами Swing
- Строка меню JMenuBar
- Меню JMenu
- Пункт меню JMenuItem
- Пункт меню JCheckBoxMenuItem
- Пункт меню JRadioButtonMenuItem
- Всплывающее меню JPopupMenu
- Панель выбора цвета JColorChooser
- Упражнение
- Окно выбора файла JFileChooser
- Фильтр файлов FileFilter
- События в документе
- Реализации документа
- Контроллер — редактор текста
- Курсор
- Реализации редактора
- Раскладка клавиатуры
- Область ввода JTextArea
- Модель данных таблицы
- Модель ячеек таблицы
- Визуализация ячеек таблицы
- Вопросы для самопроверки
- Контейнеры Swing
- Панель JPanel
- Панель с вкладками JTabbedPane
- Линейная панель Box
- Менеджер размещения BoxLayout
- Слоеная панель JLayeredPane
- Диалоговое окно JDialog
- Упражнение
- Событие ActionEvent
- Обработка действий мыши
- Событие изменения ChangeEvent
- Обработка действий с окном
- Несколько слушателей одного источника
- Вопросы для самопроверки
- Объемная рамка BevelBorder
- Закругленная объемная рамка SoftBevelBorder
- Врезанная рамка EtchedBorder
- Рамка с изображением MatteBorder
- Задание стандартного L&F
- Вопросы для самопроверки
- Сведения об окружении апплета
- Упражнение
- Изображение и звук в апплетах
- Слежение за процессом загрузки
- Заключение
- Вопросы для самопроверки
- Упражнения
- Звук
- Синтез и запись звука в Java
- Вопросы для самопроверки
- Порядок обработки исключений
- Упражнение
- Синхронизация подпроцессов
- Приоритеты подпроцессов
- Консольный ввод/вывод
- Форматированный вывод
- Класс Console
- Упражнения
- Файловый ввод/вывод
- Поток простых типов Java
- Кодировка UTF-8
- Класс DataOutputStream
- Прямой доступ к файлу
- Упражнение
- Каналы обмена информацией
- Печать в Java
- Печать средствами Java 2D
- Вопросы для самопроверки
- Работа в WWW
- Работа по протоколу TCP
- Упражнения
- Работа по протоколу UDP
- Компоненты JavaBeans
- Вопросы для самопроверки
- Интерфейс ServletResponse
- Цикл работы сервлета
- Работа по протоколу HTTP
- Интерфейс HttpServletRequest
- Сеанс связи с сервлетом
- Обращение к другим ресурсам
- Вопросы для самопроверки
- Язык записи выражений EL
- Обращение к компоненту JavaBean
- Обработка взаимодействующих тегов
- Обработка исключений в пользовательских тегах
- Обработка тегов средствами JSP
- Стандартные библиотеки тегов JSTL
- Библиотека xml
- Библиотека fmt
- Библиотека sql
- Библиотека fn
- Frameworks
- Вопросы для самопроверки
- Схема XML
- Встроенные простые типы XSD
- Вещественные числа
- Целые числа
- Строки символов
- Определение простых типов
- Сужение
- Описание элементов и их атрибутов
- Определение сложных типов
- Определение типа со сложным телом
- Другие языки описания схем
- Инструкции по обработке
- Анализ документов XML с помощью DOM API
- Другие DOM-парсеры
- Преобразование дерева объектов в XML
- Список литературы