Тут дали уже много хороших и правильных ответов, но хотелось бы уточнить, что вот эта метафора:
Виртуальня машина java это тоже интерпретатор по сути
У слов в названиях есть достаточно точный смысл, и JVM называется именно машиной , а не интерпретатором, и не компилятором совершенно не случайно. Компилятор в Яве есть (javac), и он нужен не для выполнения программы, а именно для ее компиляции (в байткод). Имено поэтому он не входит в состав JRE (среды выполнения), а содержится в JDK (среде разработки). В самой JVM есть еще один, JIT-компилятор, который компилирует байткод в инструкции процессора во время выполнения программы, но это уже другая история, и его тоже никак не назвать интерпретатором.
По сути JVM - это процессор, только виртуальный. И как у любого процессора (железного, типа x86, или виртуального, типа CLR в.NET), у него есть свой набор опкодов , называемый байткодом . Так же точно, как на х86 может выполняться код, порожденный компилятором с C++, или Pascal, или Go, так же и на JVM может выполняться байткод, скомпилированный из Java, или Scala, или Kotlin (или даже написанный вручную), а.class -файл, это, по сути, тот же.exe (точнее.so), скомпилированный под "процессор JVM". В этом и заключается кроссплатформенность. Так же, как код, скомпилированный под х86 будет выполняться на процессоре от Intel или AMD, так же и байткод JVM будет выполняться на JVM от Oracle, IBM, OpenJDK и т.д. И даже наличие JIT, компилирующего байткод в опкод конкретного железного процессора во время выполнения, все еще не дает повода обзывать честную стековую (SUN) или регистровую (Dalvik) VM интерпретатором, пусть даже и по сути:)
Дело в том, что сама эта классификация (интерпретируемый/компилируемый ЯЗЫК) последние лет эдак 25 уже практически лишена смысла. Языкам, изначально ориентированным на реализацию в виде интерпретатора (с просто анализируемой лексикой, чтоб интерпретатор был поменьше и мог оставить самой программе достаточно места в ограниченной по объему памяти) типа APL или BASIC, сейчас (кроме, разумеется, очень узкоспециального применения) почетное место разве что в старых учебниках, из которых эту самую классификацию, с достойным лучшего применения упорством, продолжают дословно переписывать в новые. При этом, почему-то, забывают уточнить, что эти два понятия уже давно не про сами языки, а всего лишь про некоторые методы их реализации, и что с тех пор помимо этих методов появилось еще много других хороших и разных концепций на эту тему (типа VM, JIT, сборщиков мусора, да и хотя бы тех же OOП, разных видов типизации и еще миллион чего), которых в тех учебниках еще просто не было в силу их года издания. И что на сегодня уже даже для языков, принципиально заточеных для компиляции под регистровую архитектуру, типа С, есть пруд пруди интерпретаторов (раз , два , три)... которые, опять же, никто не называет виртуальными машинами, т.к. это все суть разные понятия. Короче, это все равно что пытаться понять, где в квантовой механике огонь, вода, земля и воздух, в том виде, как их понимали Платон и Аристотель:)
P.S. Чтоб осознать, когда эта классификация еще была актуальна, рекомендую вот это . Там создатели APL, одного из первых настоящих интерпретируемых языков, обсуждают насущные проблемы языкостроения того времени. Если туго с английским, посмотрите хотя бы вступление... в тех железяках было меньше памяти и вычислительной мощности, чем в современной симке:)
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 состоят из однобитного кода операции, а также могут содержать операнды. Число и размер операндов определяются кодом операции, некоторые команды не имеют операндов
What is JVM?
JVM is a engine that provides runtime environment to drive the Java Code or applications. It converts Java bytecode into machines language. JVM is a part of JRE(Java Run Environment). It stands for Java Virtual Machine
In this tutorial, you will learn-
1) ClassLoader
The class loader is a subsystem used for loading class files. It performs three major functions viz. Loading, Linking, and Initialization.
2) Method Area
JVM Method Area stores class structures like metadata, the constant runtime pool, and the code for methods.
All the Objects, their related instance variables, and arrays are stored in the heap. This memory is common and shared across multiple threads.
4) JVM language Stacks
Java language Stacks store local variables, and it’s partial results. Each thread has its own JVM stack, created simultaneously as the thread is created. A new frame is created whenever a method is invoked, and it is deleted when method invocation process is complete.
5) PC Registers
PC register store the address of the Java virtual machine instruction which is currently executing. In Java, each thread has its separate PC register.
6) Native Method Stacks
Native method stacks hold the instruction of native code depends on the native library. It is written in another language instead of Java.
7) Execution Engine
It is a type of software used to test hardware, software, or complete systems. The test execution engine never carries any information about the tested product.
8) Native Method interface
The Native Method Interface is a programming framework. It allows Java code which is running in a JVM to call by libraries and native applications.
9) Native Method Libraries
Native Libraries is a collection of the Native Libraries(C, C++) which are needed by the Execution Engine.
In order to write and execute a software program, you need the following
1) Editor – To type your program into, a notepad could be used for this
2) Compiler – To convert your high language program into native machine code
3) Linker – To combine different program files reference in your main program together.
4) Loader – To load the files from your secondary storage device like Hard Disk, Flash Drive, CD into RAM for execution. The loading is automatically done when you execute your code.
5) Execution – Actual execution of the code which is handled by your OS & processor.
With this background, refer the following video & learn the working and architecture of the Java Virtual Machine.
To understand the Java compiling process in Java. Let"s first take a quick look to compiling and linking process in C.
Suppose in the main, you have called two function f1 and f2. The main function is stored in file a1.c.
Function f1 is stored in a file a2.c
Function f2 is stored in a file a3.c
All these files, i.e., a1.c, a2.c, and a3.c, is fed to the compiler. Whose output is the corresponding object files which are the machine code.
The next step is integrating all these object files into a single .exe file with the help of linker. The linker will club all these files together and produces the .exe file.
During program run, a loader program will load a.exe into the RAM for the execution.
Let"s look at the process for JAVA. In your main, you have two methods f1 and f2.
The compiler will compile the three files and produces 3 corresponding .class file which consists of BYTE code. Unlike C, no linking is done .
The Java VM or Java Virtual Machine resides on the RAM. During execution, using the class loader the class files are brought on the RAM. The BYTE code is verified for any security breaches.
Next, the execution engine will convert the Bytecode into Native machine code. This is just in time compiling. It is one of the main reason why Java is comparatively slow.
NOTE: JIT or Just-in-time compiler is the part of the Java Virtual Machine (JVM). It interprets part of the Byte Code that has similar functionality at the same time.
A compiler is a program which converts a program from one level of language to another. Example conversion of C++ program into machine code.
The java compiler converts high-level java code into bytecode (which is also a type of machine code).
An interpreter is a program which converts a program at one level to another programming language at the same level. Example conversion of Java program into C++
In Java, the Just In Time Code generator converts the bytecode into the native machine code which are at the same programming levels.
Hence, Java is both compiled as well as interpreted language.
The two main reasons behind the slowness of Java are
However, the latest version of Java has addressed the performance bottlenecks to a great extent.
Summary :
Ошибка «Could not create the Java Virtual Machine» встречается во всех версиях операционной системы Windows. Она появляется как при запуске игр, которые требуют наличие виртуальной машины Java на устройстве, так и при установке самой виртуальной машины на компьютере. Текст ошибки Java Virtual Machine Launcher говорит нам следующее: системе не удалось создать виртуальную машину Java. В этой статье мы с вами рассмотрим причины, по которым возникает эта проблема и, конечно же, устраним саму ошибку.
Окно с ошибкой «Could not create the Java Virtual Machine»
Чаще всего на появление данной ошибки жалуются игроки Minecraft. При клике на лаунчер и очередной запуск любимой игры, пользователи сталкиваются с окном ошибки Could not create the Java Virtual Machine. Это происходит из-за того, что в предыдущий раз сессия игры была прекращена некорректно. Возможно вы не дождались полного завершения игры и выключили устройство.
Ошибка JVM при запуске игр и приложений может также возникать по причине недостатка оперативной памяти на вашем устройстве. Для работы виртуальной машины Java требуется определенное количество выделенной памяти компьютером. Для компьютера это очень ценный ресурс, чем этой памяти больше, тем быстрей и лучше процессор справляется с поставленными задачами.
Рассмотрим самый распространенный способ устранения ошибки «Could not create the Java Virtual Machine» – создание новой переменной среды.
Следующий метод устранения ошибки заключается в освобождении оперативной памяти вашего компьютера. Как уже было сказано, ошибка может возникать по причине недостатка памяти. Чтобы ее освободить, нужно закрыть все ненужные программы, а также «убить» все лишние процессы. Ведь каждая программа нуждается в определенном количестве этого ресурса. На официальном сайте Майкрософт вы можете ознакомиться со всеми важными процессами Windows, прекращение которых повлечет за собой сбои системы. Чтобы остановить лишние процессы:
Чтобы закрыть программу или остановить процесс, нужно выделить мышью название программы или процесса, затем нажать на кнопку внизу окна «Снять задачу».
Некоторые запущенные фоновые программы не отображаются в списке, но их можно увидеть в списке процессов. Эта разнообразные модули обновлений, они работают в фоновом режиме и следят за выходом новых версий определенных программ. Они также потребляют оперативную память. Вашей задачей будет отыскать такие процессы и остановить для решения текущей проблемы. Когда вы очистите память и остановите все ненужные программы и процессы, попробуйте запустить снова игру, чтобы убедиться, что окно с ошибкой «Could not create the Java Virtual Machine» уже не появляется.
Если программное обеспечение, при запуске которого появляется ошибка, было скачано со сторонних ресурсов, варезных сайтов, торрент-трекеров, то его действия часто блокируют антивирусы. Чтобы избежать такой преграды при запуске вам необходимо проверить список карантина антивируса и, если в нем имеются игры или программы, вы можете их удалить с этого списка. Но будьте осторожны при этом. Ведь такое ПО может действительно нести угрозу для системы. Если вы полностью уверенны в программе или игре, вы можете добавить ее в список исключений. В таком случае антивирус перестанет «подозревать» такое ПО.
Если у вас не установлено программное обеспечение Java, вы можете загрузить его по ссылке https://www.java.com/ru/download/win8.jsp . Попадая на страницу, нажмите кнопку «Согласиться и начать бесплатную загрузку».
После этого будет загружен пакет данных, который нужно будет установить на свой ПК.
Может быть откомпилирован в байт-код Java, который затем может выполниться с помощью JVM.
JVM является ключевым компонентом платформы Java. Так как виртуальные машины Java доступны для многих аппаратных и программных платформ, Java может рассматриваться и как связующее программное обеспечение, и как самостоятельная платформа, отсюда принцип "написанное однажды, запускается везде" (write once, run anywhere). Использование одного байткода для многих платформ позволяет описать Java Как "скомпилированное однажды, запускается везде" (compile once, run anywhere).
В 2001 году, с целью разработки стандарта кросс-платформенных Desktop-приложений, Eclipse.
IBM VisualAge. IBM удалось сбалансировать интересы свободного сообщества и интересы бизнеса (свои интересы) в лицензии Eclipse Public License, признанной FSF .
Проект успешно развивается, признан индустрией, в значительной степени отделился от IBM в самостоятельную Eclipse Foundation .
Платформы | Java Card · Java ME · Java SE · Java EE | |||
---|---|---|---|---|
Технологии Sun | Java Development Kit · WTK · Java Virtual Machine · | GNU Classpath · Apache Harmony · Apache Struts · Spring Framework · Hibernate · JBoss · Processing · Dozer · AspectJ | ||
История | История версий Java · Критика Java · Java Community Process · Sun Microsystems · Свободные реализации Java | |||
Свойства языка | Байткод · Синтаксис · Апплеты · Сервлеты · Мидлеты · JavaServer Pages · Web Start · Enterprise JavaBeans | |||
Скриптовые языки | Java Tcl · | |||
Конференции Java | JavaOne |
Wikimedia Foundation . 2010 .
виртуальная машина Java - Основная часть исполняющей системы Java (Java Runtime Environment; JRE). Виртуальная машина Java интерпретирует и исполняет Java байт код, предварительно созданный из исходного текста Java программы Java компилятором. JVM может использоваться для … - разработан компанией JavaSoft. Web приложения, созданные с его использованием, могут выполняться естественным образом внутри операционной системы, или браузера Web, или внутри эмулирующей среды, известной как виртуальная машина Java … Словарь электронного бизнеса
- (JPF) свободный инструмент для проверки многопоточных Java программ. По своей сути это виртуальная Java машина (англ. Java Virtual Machine) на основе которой реализованы методы проверки моделей (англ. model checking). Это означает, что… … Википедия
виртуальная Java-машина - Интерпретатор байт кода Java программ. Виртуальная машина, предназначенная для исполнения Java аплетов. JVM встроена в большинство веб браузеров. Это позволяет исполнять на стороне клиента Java аплеты, вызовы которых предусмотрены в… … Справочник технического переводчика
Иное название этого понятия «Ява»; см. также другие значения. Не следует путать с JavaScript. Java Класс языка … Википедия
Необходимо проверить качество перевода и привести статью в соответствие со стилистическими правилами Википедии. Вы можете помочь улучшить эту статью, исправив в ней ошибки. Оригинал н … Википедия