Could not create the Java Virtual Machine что делать. Исправляем ошибку Java Virtual Machine Launcher в играх

Could not create the Java Virtual Machine что делать. Исправляем ошибку Java Virtual Machine Launcher в играх

25.06.2019

Краткая Java -терминология

Виртуальная машина (virtual machine ) – абстрактное вычислительное устройство, которое может быть реализовано разными способами: аппаратно или программно. Компиляция в набор команд виртуальной машины происходит почти так же, как и компиляция в набор команд микропроцессора.

Java -платформа (Java Platform ) – виртуальная машина Java и стандартные классы составляют Java -платформу. Java -платформа предоставляет программам унифицированный интерфейс независимо от операционной системы, на которой они работают.

Java Remote Method Invocation (JRMI ) – интерфейс вызова удаленных методов. Распределенная объектная модель, определяющая, каким образом производится вызов удаленных методов, работающих на другой виртуальной машине Java .

Java Runtime Environment (JRE ) – среда исполнения Java . Подмножество Java Development Kit , предназначенное для конечных пользователей. JRE состоит из виртуальной машины Java (JVM ), стандартных классов Java и вспомогательных файлов.

Java Virtual Machine (JVM ) – виртуальная машина Java , часть среды исполнения Java , выполняющая интерпретацию Java байт-кода. Java Virtual Machine специфицируется набором команд байт-кода, набором регистров, стеком, сборщиком мусора и пространством хранения методов.

Java байт-код (Java bytecode ) – машинно-независимый код, который генерирует Java -компилятор. Байт-код выполняется Java -интерпретатором. Виртуальная машина Java полностью стековая: не требуется сложная адресация ячеек памяти и большое количество регистров. Поэтому команды JVM короткие, большинство из них имеет длину 1 байт, отчего команды JVM называют байт-кодами (bytecodes ), хотя имеются команды длиной 2 и 3 байта (средняя длина команды составляет 1,8 байта).

Программа, написанная на языке Java , переводится компилятором в байт-код. Байт-код записывается в одном или нескольких файлах, может храниться во внешней памяти или передаваться по сети. Это особенно удобно благодаря небольшому размеру файлов с байт-кодом. Полученный в результате компиляции байт-код можно выполнять на любом компьютере, имеющем систему, реализующую JVM (в не зависимости от типа какого-либо конкретного процессора и архитектуры ПК). Так реализуется принцип Java : «Write once, run anywhere» «Написано однажды, выполняется где угодно» .

Java -апплеты (Java applets ) – Java -приложения, доступ к которым можно получить из веб-браузера.

Что такое технология Java

Технология Java была создана как инструмент программирования в компании Sun Microsystems в 1991 г. в рамках небольшого закрытого исследовательского проекта, получившего кодовое название «Green» (« проект»).

«Зеленая команда» из 13 инженеров и разработчиков под руководством Джеймса Гослинга (James Gosling ) в течение полутора лет работала сутками напролет в отдельном офисе на Sand Hill Road в г. Менло Парк (Калифорния; опять !), не информируя о своей работе компанию Sun .

Инженеры «Зеленой команды» старались предвосхитить грядущую «новую волну» в программировании и подготовиться к ней. Первоначально они исходили из предположения, что одной из основных тенденций развития будет сближение между цифровой потребительской техникой и компьютерами.

Результатом этой работы стал машинно-независимый язык программирования, получивший кодовое название «Oak» (Дуб ).

Чтобы продемонстрировать, как новый язык программирования может в будущем использоваться в цифровой технике, «Зеленая команда» создала домашний портативный интерактивный контроллер для цифрового кабельного телевидения. Но тогда эта идея была слишком новаторской, и цифровое кабельное телевидение не было готово к тому резкому прорыву, который предлагала технология Java .

Однако новаторство технологии Java оказалось востребованным для Интернета, и на первой официальной презентации технологии Java в 1995 г. команда Гослинга смогла объявить, что технология Java будет использована в интернет-обозревателе Netscape Navigator .

Ныне платформу Java используют более 4 млн. разработчиков программного обеспечения. Она используется во всех основных сферах деятельности по всему миру и применяется в самых различных устройствах, компьютерах и сетях во всех технологиях программирования.

В целом универсальность, эффективность, безопасность и совместимость с разными платформами делают технологию Java идеальным инструментом для сетевых технологий. Поэтому сегодня она используется более чем в 2,5 млрд. устройств, среди которых:

Более 1 млрд. мобильных телефонов и других портативных устройств;

1,25 млрд. смарт-карт;

А также телеприставки, принтеры, веб-камеры, игры, автомобильные системы навигации, игровые автоматы, медицинское оборудование, парковочные автоматы и т. д.

В настоящее время технологию Java можно встретить практически в любых сетях и устройствах – от Интернета и суперкомпьютеров до портативных компьютеров и мобильных телефонов, от устройств моделирования биржевых торгов до домашних игровых приставок и кредитных карт.

Почему разработчики программного обеспечения выбирают технологию Java

Язык программирования Java всесторонне дорабатывали, расширяли, тестировали и проверяли на практике более 4 млн. разработчиков программного обеспечения.

Законченная, чрезвычайно надёжная и универсальная технология Java неоценима для разработчиков программного обеспечения тем, что она позволяет им:

Писать программное обеспечение на одной платформе и запускать его практически на любой другой;

Создавать программы для работы в веб-обозревателях и веб-службах;

Разрабатывать серверные приложения для интернет-форумов, магазинов, опросов, обработки HTML -форм и др.;

Создавать максимально приспособленные для требований пользователя приложения и службы, комбинируя различные Java -модули;

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

Что представляет собой технология Mobile Java (J2ME – Java 2 Micro Edition )

В состав J2ME входит оптимизированная для широкого круга пользователей мобильных устройств версия JRE . Основными компонентами компактной версии платформы Java 2 (J2ME ) являются виртуальная машина для устройств со стандартными конфигурациями (CDC ), виртуальная машина для устройств с ограниченными конфигурациями (CDLC ) и профили мобильных устройств с информационными функциями. Кроме того, в состав этой платформы входит множество других инструментальных средств и технологий, упрощающих создание программ Java для бытовых и встроенных устройств (мобильные телефоны, карманные компьютеры, смарт-карты, пейджеры, телеприставки и другие мобильные и беспроводные устройства).

Технологии J2ME , в свою очередь, входят в состав семейства программных продуктов Java . Среди родственных технологий – стандартная (J2SE ) и корпоративная (J2EE ) версии платформы Java 2 . Помимо прочего, технология Java помогает разрабатывать веб-службы, организовывать и передавать данные на языке XML , устанавливать соединения по различным сетевым протоколам, работать с инструментальными пакетами и реализовывать функции приложения Java Web Start .

Со стандартной версией исполнительной среды Sun Java (JRE ) версию J2ME роднит соблюдение стандартных соглашений для платформ Java и участие в разработке ведущих производителей мобильных устройств и поставщиков услуг беспроводной связи.

Что такое KVM

KVM (Kilo Virtual Machine ) – это элемент исполнительной среды, входящий в состав компактной версии платформы Java 2 (J2ME ) и предназначенный для применения в устройствах с ограниченной емкостью памяти и производительностью процессора. Стандартные вычислительные функции в мобильных телефонах, пейджерах и карманных компьютерах (PDA ) часто реализуются именно при помощи KVM .

Подобно JVM (виртуальной машине Java ), KVM исполняет приложения и апплеты на основе технологии Java . KVM применяется в сотовых телефонах и других мобильных устройствах, в то время как JVM устанавливается в компьютерах. В состав стандартной версии платформы Java 2 (J2SE ) входят JRE , Java Plug-in и JVM .

Помимо KVM , платформа J2ME содержит множество виртуальных машин различных масштабов. KVM – это один из вариантов реализации виртуальной машины для устройств с ограниченной конфигурацией (Connected Limited Device Configurations , CDLC ), предназначенный для исполнения программных продуктов на основе технологии Java в мобильных устройствах.

Родственной технологией J2ME являются профили мобильных устройств с информационными функциями (Mobile Information Device Profiles , MIDP ), которые чаще всего применяются при разработке приложений для мобильных устройств – в частности, для мобильных телефонов и двухсторонних пейджеров.

Как получить программное обеспечение Java для мобильных устройств/КПК ?

Функции Java , предназначенные для мобильных устройств, устанавливаются в этих устройствах их производителями. Узнайте у производителя, установлено ли в вашем устройстве программное обеспечение Java .

Виртуальная машина KVM является аналогом виртуальной машины Java (JVM ), предназначенным для мобильных устройств. Она обеспечивает исполнение апплетов и приложений, написанных на языке Java , в мобильных устройствах. Виртуальная машина KVM должна быть установлена производителем. Её НЕЛЬЗЯ загрузить и установить самостоятельно.

Что такое Java Virtual Machine

Java Virtual Machine (сокращенно Java VM , JVM ) – виртуальная машина Java – основная часть исполняющей системы Java , так называемой Java Runtime Environment (JRE ). Виртуальная машина Java интерпретирует и исполняет байт-код Java , предварительно созданный из исходного текста Java -программы компилятором Java .

В 1996 г. компания Sun выпустила первую версию документа «Голубая книга JVM », в котором описана спецификация виртуальной машины Java , ставшего де-факто отраслевым стандартом платформы Java . Благодаря этому документу появились альтернативные реализации JVM , являющиеся «разработками с чистого листа» (англ. clean room design ). В качестве примера можно привести Kaffe .

Начиная с версии J2SE 5.0 изменения в спецификации JVM вырабатываются в соответствии с формализованными пожеланиями заинтересованных сторон. Процесс внесения изменений в спецификации JVM называется Java Community Process .

Противостояние Sun и Microsoft

В начале развития платформы Java существовали две конкурирующие реализации Java VM – одна от фирмы Sun Microsystems , создателя языка Java , для различных платформ (Windows , Mac OS , Unix ), и другая – от фирмы Microsoft , ориентированная только на платформу Windows и, по утверждению Microsoft , «специально оптимизированная для быстрого выполнения Java -кода на платформе Microsoft Windows ».

Однако, Microsoft JVM была не полностью совместима со спецификацией, описанной Sun в книге JVM , а также имела существенные проблемы, связанные с безопасностью и с производительностью при работе под большими нагрузками (при большом числе одновременно выполняемых потоков). Компания Sun посчитала такую ситуацию недопустимой и решила, что Microsoft занимается намеренной дискредитацией и профанацией платформы Java путём распространения своей версии виртуальной машины Java , обладающей вышеперечисленными недостатками.

На этом основании Sun неоднократно подавала в суд на Microsoft , и последовательно добилась сначала того, что Microsoft потеряла право называть свою реализацию JVM Java VM . С этого момента Microsoft стала называть свой продукт просто Microsoft VM . Затем Microsoft потеряла право встраивать свою VM в браузеры и операционные системы. После этого Microsoft вынуждена была изъять свою VM из поставки Windows и из пакета IE , но могла, согласно решению суда, предлагать её отдельно для скачивания на своем сайте. Затем Sun добилась прекращения разработки новых версий Microsoft VM и прекращения выпуска обновлений к ней, а затем и исключения Microsoft VM из списка доступных для скачивания программ на сайте Microsoft .

Некоторые IT -эксперты считают, что жёсткая позиция, занятая Sun по вопросу Java , могла послужить дополнительным стимулом для разработки компанией Microsoft собственного кросс-платформенного решения – .NET Framework .

О борьбе за соблюдение стандартов

Вот что говорит по этому поводу «отец» Java Джеймс Гослинг: «Если говорить о соблюдении стандартов, то наш конфликт с Microsoft состоял в том, что эта компания попыталась ограничить интероперабельность своей виртуальной машины, тем самым нарушив достигнутое раннее соглашение. Код, оптимизированный под эту машину, не исполнялся на других платформах. Налицо попытка привязать пользователей к своей системе. Такие попытки всегда пресекались и будут пресекаться впредь. Однако если принцип интероперабельности соблюдается, то никаких препятствий нет. Например, у IBM по меньшей мере полдюжины виртуальных машин Java , есть свои разработки в этой области у HP и многих других компаний».

Противостояние Sun и IBM

В 2001 г., с целью разработки стандарта кросс-платформенных d esktop -приложений, IBM стартовала открытый проект Eclipse . Фреймворк Eclipse основан на закрытой разработке IBM VisualAge . IBM удалось сбалансировать интересы свободного сообщества и интересы бизнеса (свои интересы) в лицензии Eclipse Public License , признанной FSF .

Проект успешно развивается, признан индустрией, в значительной степени отделился от IBM в самостоятельную Eclipse Foundation .

Sun остается в оппозиции Eclipse Foundation , как и Microsoft . Формально основной причиной противоречий остается библиотека SWT , которая противоречит Sun -концепции виртуальной машины и переносимости джава-приложений.

Как проверить, какая версия Java установлена на вашем ПК

Откройте страницу java.com/ru/download/installed.jsp ;

– нажмите кнопку Проверьте версию Java .

Как скачать и установить Java Virtual Machine

– откройте страницу java.com/ru ;

– нажмите кнопку Скачать Java бесплатно ;

– в окне Предупреждение о безопасности нажмите Да –> Continue –> Accept Show Advanced Options Panel ) –> Next –> Next –> в окне с сообщением нажмите Finish .

Как скачать Java вручную

Чтобы скачать Java вручную, откройте страницу java.com/ru/download/manual.jsp ;

– выберите файл в соответствии с вашей операционной системой из списка, скачайте его и запустите установочный файл;

– в окне Java Setup нажмите Continue –> Accept (если вы хотите изменить путь к установочной папке или изменить другие параметры, выберите Show Advanced Options Panel ) –> Next –> Next –> в окне с сообщением Thank You! You have Successfully Installed Java нажмите Finish .

Примечания

1. После завершения установки Java может потребоваться перезапустить браузер.

2. Убедиться в правильности установки программного обеспечения Java можно, перейдя по ссылке Проверить немедленно .

3. В браузере должна быть включена поддержка JavaScript и cookies .

4. Стандартный размер скачивания составляет 7,1МБ (это минимальный объем скачиваемых файлов). Размер может увеличиться в случае выбора дополнительных функций.

5. Кроме Windows , вы можете скачать Java для Solaris , Linux .

Для Apple (OS X ) скачайте Java с сайта компании Apple .

6. Поддерживаются процессоры Intel и совместимые с ними процессоры других производителей. Рекомендуется к применению процессор Pentium с тактовой частотой 166МГц и выше в сочетании с физической оперативной памятью емкостью не менее 64МБ . Кроме того, вам понадобится как минимум 98МБ свободного дискового пространства.

7. После установки виртуальной машины Java от Sun Microsystems в создается раздел

.

После установки виртуальной машины в Реестре Windows создаются разделы

Где скачать Microsoft Java Virtual Machine

В ОС Windows некоторые программы требуют при установке наличия в системе виртуальной машины Java от Microsoft .

Microsoft VM (версия 5.00.3810 от 07.03.2003; 5,07МБ ) можно скачать по .

Как удалить Microsoft Java Virtual Machine

Чтобы удалить msjava :

– нажмите Пуск –> Выполнить ;

– в открывшемся окне Запуск программы в текстовое поле Открыть введите RunDll32 advpack.dll,LaunchINFSection Java.inf,UnInstall –> OK ;

– удалите папку \WINDOWS\java ;

– удалите файл \WINDOWS\inf\java.pnf ;

– удалите файл \WINDOWS\system32\jview.exe ;

– удалите файл \WINDOWS\system32\wjview.exe ;

– нажмите Пуск –> Выполнить ;

– в открывшемся окне Запуск программы в текстовое поле Открыть введите regedit –> OK ;

– в открывшемся окне Редактор реестра удалите разделы

;

– закройте Редактор реестра .

Как разрешить использование исполнительной среды Java (JRE ) в веб-обозревателе

Дизайн JVM разрабатывался на основе многолетнего опыта программирования на таких языках как С и С++. Это позволило создать такую структуру JVM, которая сделала жизнь программиста значительно легче:

  • код приложения выполняется в контейнере,
  • в наличии защищённая среда выполнения программы,
  • уменьшилась до минимума возможность управления памятью программистом,
  • среду исполнения сделали кроссплатформенной,
  • стала использоваться рантайм (во время выполнения программы) информация для самоуправления.

Последний аспект позволяет JVM принимать более оптимальные решения при выполнении программы, основываясь на том как часто вызываются некоторые её блоки. Собственно виртуальная машина интерпретирует байт код скомпилированной джава программы, однако в JVM существует возможность компилировать часто вызываемые блоки программы в машинный код в рантайме. Эта технология называется Jast-in-time (JIT). Это не значит что машинный код сохранится в файл программы, он будет существовать только во время её выполнения в оперативной памяти. Таким образом производительность джава программы, после нескольких циклов работы, может стать выше чем у аналогичных программ компилируемых языков C и C++.

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

Фактически байткод не очень похож на машинный код который будет запущен на реальном процессоре. Специалисты называют байткод промежуточным представлением, адаптацией между исходным кодом и машинным кодом.

Конечная цель байткода иметь такой формат представления данных и управляющей информации, что бы быть эффективно исполненным JVM.

Почему его назвали байткодом?
Код инструкции (opcode код операции) это только один байт (некоторые операции имеют параметры которые следуют за байтом операции в виде потока байт), таким образом существует только 256 вариантов инструкций. На практике некоторые не используются, остаётся примерно 200 используемых, но некоторые из них не были задействованы в последней версии javac.

Является ли компилятором javac?
Обычно компилятор создаёт машинный код, а javac создаёт байткод, непохожий на машинный код. Однако class файлы немного похожи на объектные файлы (как в Windows *.dll или Unix *.so) и являются нечитабельными.

В терминах компьютерных наук, javac наиболее похож на компилятор переднего плана, который создаёт промежуточное представление программного кода, из которого затем может быть создан машинный код.

Таким образом в чистом виде javac не компилятор, однако в большинстве книг и статей можно увидеть такие словосочетания - компилятор исходного кода или javac компилятор. А собственно компиляцией занимается JIT, когда создаёт машинный код для оптимизации выполнения программы.

Является ли байткод оптимизированным?
Ранние версии javac создавали сильно оптимизированный байткод. Это оказалось ошибочным. С появлением JIT компиляции более важным стало быстрое получение машинного кода. Поэтому оказалось, что нужно создавать такой байткод, который бы легко компилировался JIT. Поэтому сейчас имеется компромисс между оптимальностью байткода и быстротой его JIT компиляции. В свою очередь некоторая часть байткода продолжает оставаться интерпретируемой.

Является ли байткод действительно машинно независимым? Как на счёт порядка байт?
Формат байт кода всегда один и тот же, не важно на какой машине он был создан, это всегда big-endian (от старшего разряда к младшему). Например целое число занимающее в памяти 4 байта, хранится там побайтно от старших разрядов к младшим.

Является ли джава интерпретируемым языком?
По существу JVM это интерпретатор (с JIT компиляцией, которая даёт прирост производительности). Собственно исходный код джава не поступает интерпретатору на исполнение, он компилируется в байткод, а уже байт код интерпретируется JVM.

Могут ли другие языки выполнятся на JVM?
Всё что компилируется в байткод, может быть выполнено на JVM. Примеры таких языков - Scala, Clojure, Kotlin и т.д.
Кроме того, есть возможность реализовать интерпретатор некоторого языка на джава. Как это сделано, например, для языка JRuby.

Чтобы увидеть байт код, достаточно открыть файл.class в простом текстовом редакторе. Он окажется явно не читабельным. Однако у нас есть возможность дизассемблировать его в мнемоники байткода, то есть в элементарные команды (которые можно прочитать) и данные.

Рассмотрим простую программу складывающую два числа.

Public class Main { /** * Метод складывающий два числа. * @param a первое слагаемое * @param b второе слагаемое * @return результат сложения двух чисел. */ private static int adding(int a, int b) { return a + b; } /** * Точка входа в программу. * @param args неиспользуемые параметры командной строки. */ public static void main(String args) { // первое слагаемое int x = 43; // второе слагаемое int y = 56; // сложение значений двух переменных и помещение // результата в переменную. int result = adding(x, y); // вывод на экран значения переменной result. System.out.println(result); } }

Для удобства, можно создать пустой проект в Idea, и поместить этот класс в папку src.
Запустите его на исполнение. Idea скомпилирует его, естественно используя для этого javac, создаст файл Main.class и запустит его на исполнение. Проверим что у нас всё получилось, в консоли должна появится сумма чисел.

Затем перейдём в терминале в папку вашего проекта, а затем в папку где должен быть создан файл class. Это должно быть в папке out/production.

Для дизассемблирования запустите следующую команду, а в качестве параметра передайте скомпилированный класс:

Javap -c -p Main.class

С - дизассемблирование,
-p - вывод информации о всех членах класса.

В терминале мы должны получить следующее:

Public class org.dart.Main { public org.dart.Main(); Code: 0: aload_0 1: invokespecial #1 // Method java/lang/Object."":()V 4: return private static int adding(int, int); Code: 0: iload_0 1: iload_1 2: iadd 3: ireturn public static void main(java.lang.String); Code: 0: bipush 43 // литерал числа присвоенный первой переменной 2: istore_1 3: bipush 56 // литерал числа присвоенный второй переменной 5: istore_2 6: iload_1 7: iload_2 8: invokestatic #2 // Method adding:(II)I 11: istore_3 12: getstatic #3 // Field java/lang/System.out:Ljava/io/PrintStream; 15: iload_3 16: invokevirtual #4 // Method java/io/PrintStream.println:(I)V 19: return }

Здесь можно увидеть много интересного, даже код который мы явно сами не писали. Например метод:

Public org.dart.Main(); Code: 0: aload_0 1: invokespecial #1 // Method java/lang/Object."":()V 4: return

Это не обычный метод, это конструктор. Он добавился автоматически при компиляции. Почему он добавляется это отдельная история.

Обратите внимание, кажется что нумерация строк кода внутри методов идёт не по порядку. Это не совсем так. Она учитывает длину параметров от которых зависят некоторые операции.

Рассмотрим метод складывающий два числа, с помощью комментариев поясним смысл операций:

Private static int adding(int, int); Code: 0: iload_0 // загрузка первого целого числа из параметра в стек 1: iload_1 // загрузка второго целого числа из параметра в стек 2: iadd // сложение двух чисел из стека и помещение результата в стек 3: ireturn // возвращение целого числа из метода

В данном случае все операции занимают строго по одному байту.
Со списком операций можно познакомится по этой ссылке:
список инструкций Java байткода

Из набора таких операции и их параметров состоит любая программа скомпилированная javac. В свою очередь JVM, при запуске программы, начинает интерпретировать команды, превращая некоторые блоки программы в машинный код с помощью JIT технологии.

Для эксперимента, можно посмотреть какой код получится для разных операций с разными типами данных. Так же можно проверить сколько байт будет отдаваться под данные для чисел превышающих один байт, то есть больших чем 255.

JVM (Виртуальная Машина Java) - основа языка программирования Java. Среда Java состоит из пяти элементов:
■ Язык Java
■ Определение байт-кода
■ Библиотеки класса Java/Sun
■ Виртуальная машина Java
■ Структура файла.class

Из всех этих пяти элементов, элементы, которые привели к успеху Java
■ Определение байт-кода,
■ структура файла.class,
■ и Виртуальная машина Java.

Таким образом "write once and run anywhere", было фактически осуществлено благодаря мобильности файла.class, который помогает выполнению на любом компьютере или наборе микросхем с использованием Виртуальной Машины Java.

1.3.1 Что такое Виртуальная машина Java?

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

Компилятор конвертирует исходный текст в код, который основан на воображаемой системе команд компьютеров и не зависит от специфичности процессора. Интерпретатор -приложение, которое понимает эти потоки команд и преобразовывает эти команды для используемого оборудования, к которому относится интерпретатор. JVM создает систему поддержки выполнения внутренне, что помогает выполнению кода при
■ загрузке файлов.class,
■ управлению памятью
■ выполнении обработки исключений.

Из-за несогласованности аппаратных платформ виртуальная машина использует понятие стека, который содержит следующую информацию:
■ Описатели состояния метода
■ Операнды к байт-кодам
■ Параметры методов
■ Локальные переменные

Когда код выполняется с помощью JVM, то существует один специальный регистр, который используется как счетчик, указывая выполняющиеся в настоящее время команды. Если необходимо, команды изменяют программу, изменяют поток выполнения, иначе поток последователен и переходит от одной команды к другой.

Другое понятие, которое становится популярным - это использование Just In Time (JIT) компилятора. Браузеры подобно Netscape Navigator 4.0 и Internet Explorer 4.0 включают JIT компиляторы, которые увеличивают скорость выполнения кодов Java. Основная цель JIТ состоит в том, чтобы преобразовать систему команд байт-кода к машинным командам кода, целенаправленным для специфического микропроцессора. Эти команды сохраняются и используются всякий раз, когда запрос делается к этому специфическому методу.

1.3.2 Среда выполнения Java

JRE (Java Runtime Environment, среда выполнения Java) JVM взаимодействующего с аппаратными средствами на одной стороне и программе на другом. JRE выполняет код, откомпилированный для JVM:
Загрузка.class файлов
Выполняется с помощью "Загрузчика классов"
Загрузчик класса делает проверку защиты, если файлы используются в сети.
Проверка байт-кода
Выполняется "верификатором байт-кода"
Верификатор байт-кода проверяет формат кода, преобразования типов объектов и проверяет нарушение прав доступа.
Выполнение кода
Выполняется "интерпретатором во время выполнения"
Интерпретатор выполняет байт-коды и делает запросы на используемое оборудование.


Рисунок 1.3: Среда выполнения Java

1.3.3 Обработка исключений и управление памятью

В С, C++ или Паскале, программисты использовали примитивные методы распределения и освобождения блоков памяти - динамическую память. Динамическая память -большой кусок памяти, который обозначен в объёме всей памяти.

Динамическая память используется:
Свободный блочный список
Распределённый блочный список

Свободный список проверяет блок памяти всякий раз, когда делается запрос. Используется механизм распределения - "метод первого подходящего блока", посредством чего первый наименьший блок памяти распределяется в зависимости от запроса. Эта процедура распределяет и освобождает небольшие объёмы памяти различных размеров от динамической памяти, при этом фрагментация динамической памяти сводится к минимуму.

Существует стадия, посредством которой выполняется запрос к памяти - для получения большего блока памяти, чем доступно. В таких случаях программа управления динамической областью должна создать больше памяти. Эту методику называют уплотнением. Это процесс, посредством которого все свободные доступные блоки памяти объединяются вместе, перемещая свободную память одному из концов динамической памяти, таким образом создавая один большой блок памяти.

Виртуальная Машина Java использует две отдельные динамических памяти для статического и динамического распределения памяти.

Динамическая память - не делает обработку исключений динамической памяти, которая сохраняет все свойства класса, постоянный пул и таблицы методов.

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

Алгоритм обработки исключений применяется к объектам, помещенным в динамическую память. Поскольку запрос о блоке памяти получен, программа управления динамической областью первые проверки свободный список и если программа управления динамической областью не может найти свободные блоки памяти, вызывается обработка исключений, как только система имеет простой в течение достаточного периода времени. В случаях, когда приложения очень интерактивны и время простоя системы сведено к минимуму, обработку исключений нужно вызвать явно приложением.

Коллектор исключений вызывает завершающийся метод прежде, чем с помощью обработки исключений собирается образец объекта. Завершающийся метод используется чтобы очистить внешние ресурсы подобно файлам и потокам, которые являются открытыми и о которых не позаботились в стандартной обработке исключений. Даже если мы явно вызываем обработку исключений методом (System.gc ()), это не будет работать быстро. Это просто намечено для того, чтобы работать. Также это означает, что обработка исключений не может быть вызвана. Это объясняется тем, что потоки обработки исключений выполняются в очень низком приоритете и могут часто прерываться. Это может случиться, когда наш объект никогда не располагался ранее в памяти.

JVM является ключевым компонентом платформы Java. Виртуальная машина Java интерпретирует и исполняет Байт-код Java, предварительно созданный из исходного текста Java-программы компилятором Java (javac).

Так как виртуальные машины Java доступны для многих аппаратных и программных платформ, Java может рассматриваться и как связующее программное обеспечение, и как самостоятельная платформа, отсюда принцип «написано однажды, запускается везде» (write once, run anywhere). Использование одного байт-кода для многих платформ позволяет описать Java как «скомпилировано однажды, запускается везде» (compile once, run anywhere).

Программы, предназначенные для запуска на JVM должны быть скомпилированы в стандартизированном переносимом двоичном формате, который обычно представляется в виде файлов.class. Программа может состоять из множества классов, размещенных в различных файлах. Для облегчения размещения больших программ, часть файлов вида.class могут быть упакованы вместе в так называемый.jar файл (сокращение от Java Archive).

Виртуальная машина JVM исполняет файлы .class или .jar , эмулируя инструкции, написанные для JVM, путем интерпретирования или использования just-in-time компилятора (JIT), такого, как HotSpot от Sun microsystems. В наши дни JIT компиляция используется в большинстве JVM в целях достижения большей скорости. Существуют также ahead-of-time компиляторы, позволяющие разработчикам приложений прекомпилировать файлы классов в родной для конкретной платформы код.

JVM, которая является экземпляром JRE (Java Runtime Environment), вступает в действие при исполнении программ Java. После завершения исполнения, этот экземпляр удаляется сборщиком мусора. JIT является частью виртуальной машины Java, которая используется для ускорения времени выполнения приложений. JIT одновременно компилирует части байт-кода, которые имеют аналогичную функциональность, и, следовательно, уменьшает количество времени, необходимого для компиляции.

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

Среда выполнения метода содержит информацию, необходимую для динамического связывания, возврата из метода и обработки исключений. Код класса (размещенный в области класса) обращается к внешним методам и переменным, используя символические ссылки. Динамическая компоновка переводит символические ссылки в фактические. Среда выполнения содержит ссылки на таблицу символов метода, через которую производятся обращения к внешним методам и переменным.

В среде выполнения содержится также информация, необходимая для возврата из метода: указатель на кадр вызывающего метода, значение регистра pc для возврата, содержимое регистров вызывающего метода и указатель на область для записи возвращаемого значения.

Информация обработки исключений содержит ссылки на секции обработки исключений в методе класса.

Через среду выполнения также происходят обращения к данным, содержащимся в области класса, в том числе, к константам и к переменным класса.

Команды JVM состоят из однобитного кода операции, а также могут содержать операнды. Число и размер операндов определяются кодом операции, некоторые команды не имеют операндов



© 2024 beasthackerz.ru - Браузеры. Аудио. Жесткий диск. Программы. Локальная сеть. Windows