Virtual java machine недостатки

Чем хороша JVM?

Виртуальная машина Java (JVM) является частью среды выполнения Java (JRE)минимальной среды, необходимой для запуска программы Java. Сначала Java-программы компилируются в байт-код (т. е. файл .class) с помощью компилятора Java, а затем выполняются JVM. Это означает, что любая программа, скомпилированная в байт-код, может выполняться на любой платформе, для этого нужна только установленная на ней JVM. Это то, что делает программы Java совместимыми со многими платформами. Давайте сначала посмотрим на преимущества JVM.

Преимущества JVM

Независимость от платформы

Основная сила Java — концепция «напиши один раз, работай где угодно». В то время как родные языки, такие как C/C++, компилируются для соответствия конкретной платформе, код Java компилируется в байт-код. Как я упоминал ранее, байт-код Java можно запускать на нескольких платформах, если на него можно установить JVM. JVM может интерпретировать инструкции байт-кода на родном языке для конкретной платформы.

Среда выполнения с общим API

Другим огромным преимуществом использования JVM является общий API для работы с ресурсами, зависящими от платформы. Например, нет необходимости думать о том, как обрабатывать файловый ввод/вывод (I/O) на каждой возможной платформе, когда JVM сделает это за вас. JVM будет обрабатывать не только специфичный для платформы файловый ввод-вывод, но и другие ресурсы, такие как память, сеть, устройства ввода-вывода и т. д.

Мало того, что в JRE доступно огромное количество библиотек Java, включая распространенные. Любой язык программирования JVM имеет доступ ко всем из них, как если бы они были частью их собственного языка.

Читайте также:  Delete files and folders in python

Безопасность

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

Правильность

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

Управление памятью

К слову о распределении памяти. Нет необходимости резервировать память для только что созданного массива или манипулировать указателями, пытаясь просто работать с массивами. Виртуальная машина Java будет управлять памятью. Он выделит необходимую память для переменных и объектов. Затем доступ к памяти отслеживается, и подсистема JVM сборщик мусора (GC) может освободить неиспользуемую память, когда придет время. Сборщик мусора не идеален, и наряду с его полезностью он приводит к небольшому снижению производительности.

Основное преимущество управления памятью JVM заключается в том, что при разработке программного обеспечения не нужно думать, когда выделять память, а когда ее освобождать. Самая популярная проблема с неуправляемыми языками, такими как C, — это утечка памяти, вызванная самой программой.

Не только Ява

Java — не единственный язык программирования, работающий на JVM. Преимуществ использования JVM больше, чем недостатков. Многие современные популярные языки разработаны специально для JVM, например, масштабируемый Scala, динамический Groovy, функциональный Closure и Kotlin.

Недостатки JVM

Представление

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

Однако есть некоторые функции, представленные в более поздних версиях JVM, которые могут повысить производительность выполнения. Это компилятор Just-In-Time (JIT), он компилирует байт-код в собственный код. Затем для повторных вызовов методов он напрямую предоставляет собственный код, что повышает производительность системы. Это еще не все.

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

JVM

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

«Все, что может пойти не так, пойдет не так». — Закон Мерфи

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

Объем памяти

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

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

Вывод

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

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

Источник

Оцените статью