"Дмитрий Леонов. Использование Perl в интернет-технологиях" - читать интересную книгу автора

Основным достоинством Java-приложений является их независимость от
клиентской платформы. В отличие от традиционных приложений, транслирующихся
в исполняемые коды процессора, Java-приложения транслируются в так
называемый байт-код, интерпретируемый в дальнейшем виртуальной Java-машиной.
При этом байт-код независим от платформы, на которой он в дальнейшем будет
выполняться - достаточно, чтобы для этой платформы была реализована
Java-машина. Поскольку большая часть основных функций реализована на уровне
виртуальной Java-машины, это приводит к существенному уменьшению размеров
байт-кода. Это является как достоинством, так и недостатком Java-приложений
- поскольку байт-код интерпретируются виртуальной машиной,
производительность Java-приложений уступает производительности традиционных
откомпилированных программ. Частично с этим удается бороться, применяя
компиляторы времени исполнения (JIT - just in time compilers),
осуществляющие компиляцию приложения при его загрузке в "родной" для данного
процессора код. Также возможен вызов функций, реализованных на других языках
программирования (таких как С, С++) и откомпилированных для данной платформы
- так называемый native code. Это применяется при реализации наиболее
критичных к времени исполнения фрагментов кода.
Другим достоинством Java-приложений является их защищенность - как с
точки зрения программирования (из языка исключены средства, наиболее часто
приводящие к ошибкам при программировании - такие как указатели, перегрузка
операторов и т.д., язык является строго объектно-ориентированным, в него
встроена "сборка мусора" и т.д.), так с точки зрения исполнения (значительно
ограничена возможность работы с файлами на локальных машинах, с
установлением сетевых соединений и т.д., программа выполняется в отдельном
адресном пространстве), что позволяет спокойно работать с приложениями,
полученными из сети, не опасаясь наличия в них опасного кода. Таким образом,
проблема безопасности полностью решена на уровне архитектуры.
Второй недостаток - необходимость существования для данной платформы
виртуальной Java-машины. Java-машины реализованы для всех наиболее
распространенных платформ, но они остаются достаточно ресурсоемкими и
зачастую довольно нестабильными системами. Кроме того, остаются проблемы
несовместимости - поскольку язык Java изначально проектировался для
написания многоплатформенных приложений, в него преимущественно входили
элементы, доступные на всех платформах, что привело к некоторой аскетичности
доступных средств. Некоторые разработчики виртуальных машин расширяли их
возможности для конкретной платформы, что может привести к тому, что
Java-приложение, использующее все эти возможности, утратит способность
запускаться на других платформах. Ошибки в реализации виртуальной машины
могут также привести к снижению безопасности системы, за последние несколько
лет тому было немало примеров.
Существенным достоинством Java является ее объектная ориентированность.
Программа на Java представляет собой набор взаимодействующих между собой
классов. С помощью классов осуществляется и доступ к основным сервисам
виртуальной машины. Стандартная библиотека классов достаточно обширна и
включает в себя классы для работы с сетевыми протоколами - как на низком,
так и на прикладном уровне, с графикой, графическим пользовательским
интерфейсом, базами данных, строками и т.д.
Перечисленные достоинства делают Java-приложения лучшим выбором в
гетерогенных системах, для которых безопасность имеет большее значение чем