Я только начал изучать Java, и меня не совсем понимает тема независимости от платформы.
Разве «независимость» не означает, что код Java должен работать на любой машине и не требует установки специального программного обеспечения? Тем не менее, JVM должна присутствовать в машине.
Например, нам нужен компилятор Turbo C, чтобы скомпилировать исходный код C / C ++ и затем выполнить его. На машине должен быть компилятор C.
Может ли кто-нибудь понравиться, что имеется в виду, когда Java описывается как «независимая от платформы»?
java
cross-platform
Безмятежность
источник
источник
.exe
файл. в лучшем случае для этого требуется библиотека времени выполнения (в.dll
файле), а не весь компиляторОтветы:
Как правило, скомпилированный код представляет собой точный набор инструкций, необходимых процессору для «выполнения» программы. В Java скомпилированный код представляет собой точный набор инструкций для «виртуального процессора», который должен работать одинаково на каждой физической машине.
Итак, в некотором смысле разработчики языка Java решили, что язык и скомпилированный код будут независимыми от платформы, но, поскольку код в конечном итоге должен выполняться на физической платформе, они решили поместить весь код, зависящий от платформы, в JVM.
Это требование для JVM отличается от вашего примера Turbo C. С Turbo C компилятор будет создавать код, зависящий от платформы, и нет необходимости в подобной работе JVM, потому что скомпилированная программа Turbo C может быть выполнена непосредственно ЦП.
В Java ЦП выполняет JVM, которая зависит от платформы. Эта запущенная JVM затем выполняет байт-код Java, который не зависит от платформы, при условии, что у вас есть JVM, доступная для его выполнения. Вы можете сказать, что при написании кода Java вы не программируете код, который будет выполняться на физической машине, вы пишете код, который будет выполняться на виртуальной машине Java.
Единственный способ, которым весь этот байт-код Java работает на всех виртуальных машинах Java, - это то, что был написан довольно строгий стандарт того, как работают виртуальные машины Java. Это означает, что независимо от того, какую физическую платформу вы используете, часть, в которой байт-код Java взаимодействует с JVM, гарантированно будет работать только в одном направлении. Поскольку все JVM работают одинаково, один и тот же код работает одинаково везде без перекомпиляции. Если вы не можете пройти тесты, чтобы убедиться, что это то же самое, вам не разрешается называть свою виртуальную машину «виртуальной машиной Java».
Конечно, есть способы, которыми вы можете нарушить переносимость Java-программы. Вы можете написать программу, которая ищет файлы только в одной операционной системе (например, cmd.exe). Вы можете использовать JNI, который эффективно позволяет вам помещать скомпилированный код C или C ++ в класс. Вы можете использовать соглашения, которые работают только для определенной операционной системы (например, предположение, что ":" разделяет каталоги). Но вам гарантировано, что вам никогда не придется перекомпилировать вашу программу для другой машины, если вы не делаете что-то действительно особенное (например, JNI).
источник
Прежде чем вдаваться в подробности, сначала вы должны понять, что такое платформа? Платформа состоит из компьютерного оборудования (в основном это архитектура микропроцессора) и ОС. Платформа = оборудование + операционная система
Все, что не зависит от платформы, может работать с любой операционной системой и оборудованием.
Java не зависит от платформы, поэтому Java может работать на любой операционной системе и оборудовании. Теперь вопрос в том, насколько он независим от платформы?
Это из-за магии байтового кода, который не зависит от ОС. Когда компилятор java компилирует любой код, он генерирует байтовый код, а не машинный машинный код (в отличие от компилятора C). Теперь этому байтовому коду требуется интерпретатор для выполнения на машине. Этот интерпретатор - JVM. Таким образом, JVM читает этот байт-код (который не зависит от машины) и выполняет его. Разная JVM предназначена для разных ОС, и байт-код может работать в разных ОС.
В случае C или C ++ (язык, не зависящий от платформы) компилятор генерирует файл .exe, который зависит от ОС, поэтому, когда мы запускаем этот файл .exe в другой ОС, он не запускается, потому что этот файл зависит от ОС, поэтому он несовместим с другая ОС.
Наконец, промежуточный независимый от ОС байт-код делает платформу Java независимой.
источник
Это означает, что программисту на Java (теоретически) не нужно знать детали машины или ОС. Эти детали действительно существуют, и их обрабатывают JVM и библиотеки классов. Кроме того, в отличие от C, двоичные файлы Java (байт-код) часто можно перемещать в совершенно разные системы без изменения или перекомпиляции.
источник
Нет, все наоборот. Благодаря тому, что вы используете виртуальную машину, программа Java становится независимой.
Виртуальная машина не является независимой, вам необходимо установить ту, которая специально предназначена для вашего типа системы. Виртуальная машина создает независимую платформу поверх операционной системы.
источник
JVM - это «смоделированная машина», которую можно установить в различных системах. Таким образом, один и тот же код Java может работать в разных системах, поскольку он полагается на JVM, а не на саму операционную систему.
Иными словами, это позволяет программисту связываться с виртуальной системой (JVM) и использовать ее функции вместо конкретных функций машины и ОС. Поскольку Java полагается только на JVM, она не зависит от платформы (если на платформе установлена JVM).
Короче говоря, Java не является независимой от платформы как таковая, она требует установки JVM для всех систем, на которых она должна работать. Однако он будет работать во всех системах, в которых установлена JVM.
источник
Java не зависит от платформы, поскольку имеет JVM (виртуальная машина Java). Проиллюстрируем это на примере из жизни. Предположим, вы свободны для членов своей семьи. Но почему?
Потому что вы их хорошо знаете, и они тоже знают вас. Но вы не свободны для членов моей семьи. Потому что вы их не знаете, и они вас тоже не знают. Но если я ваш друг и когда я смогу познакомить вас с членами моей семьи, значит, вы сможете свободно разговаривать с ними.
Точно так же, если вы код, а я JVM. Кроме того, ваша семья - это платформа Windows, а моя - платформа Linux. В случае, если вы были на C или других языках, зависящих от платформы, вы знаете только членов своей семьи и наоборот. Вот почему только платформа, на которой вы были написаны, знает этот Код и будет его поддерживать. Но если вы код JAVA, и когда вы приходите в мою семью, а именно. платформа Linux, и если вы там найдете меня, JVM, я могу познакомить вас со своей семьей, платформой Linux, и вы сможете с ней взаимодействовать.
Что касается платформенно-зависимых языков, у них нет такого друга, как JVM, который мог бы представиться любому семейству платформ. Вот почему Java не зависит от платформы. :)
источник
JVM абстрагируется от конкретной платформы. Ваша программа полагается только на JVM, и поскольку JVM доступна для разных платформ, таких как Windows и Linux, ваша программа не зависит от платформы (но зависит от jvm).
источник
В c / c ++ исходный код (программный файл c) после компиляции с использованием компилятора напрямую преобразуется в собственный машинный код (который понятен конкретной машине, на которой вы компилируете код). Следовательно, скомпилированный код c / c ++ не может работать в разных ОС.
Но в случае Java: исходный файл java (.java) будет скомпилирован с использованием компилятора JAVAC (присутствует в JDK), который предоставляет байтовый код (файл .class), который понятен любой JVM, установленной на любой ОС (физическая система) .
Здесь нам нужно иметь другую JVM (которая зависит от платформы) для разных операционных систем, в которых мы хотим запускать код, но файл .class (скомпилированный код / промежуточный код) остается таким же, потому что он понятен любой установленной JVM на любой ОС.
В c / c ++: только исходный код не зависит от машины. В Java: как исходный код, так и скомпилированный код не зависят от платформы.
Это делает платформу Java (машину) независимой.
источник
java не является независимой от платформы, сама по себе является платформой, на основе которой работают Java-приложения, но сама платформа Java зависит от платформы
источник
1:jvm
(т.е. виртуальная машина Java) - это набор программ, который содержит множество файлов, которые обеспечивают различные функциональные возможности, присутствующие в папке (то есть коллекции программ в формате среднего уровня), как вызываетсяpackages
.jvm
помогает не быть перегруженнымo/s
там, где он помогает выполнять только.class
файлы или java-приложения только сам по себе. Он помогает сделать его формат среднего уровня равенства после компиляции java, затем он предоставляет представление байтового кода (файл .class), которое не является специфическим дляo/s
иprocessor
.2: jvm делает байт-код в
.exe
файл для понятного обработчику и представляет распределение памяти для каждой функции после получения байт-кода от FRM.3: jvm также освобождает выделение памяти из оперативной памяти после того, как управление завершает выполнение.
источник
JVM зависит от ОС. для каждой ОС JVM разные.
".class" одинаков для всех JVM. Итак, каждая JVM понимает данные файла ".class".
Зависящая от Windows JVM дает зависящую от Windows инструкцию для Windows, зависимая от Linux JVM дает зависимую от Linux инструкцию для linux.
это похоже на другие операционные системы. Итак, java работает в любой операционной системе.
вот почему Java не зависит от ОС.
источник
Проще говоря:
Язык программирования Java не зависит от платформы.
JVM зависит от платформы
источник
Java не зависит от платформы в том смысле, что работает на JVM. Сказав это, вы получаете независимость от платформы через программирование на одной абстрактной машине, которая имеет конкретные реализации на большинстве распространенных платформ ОС (и некоторых встроенных устройствах).
Связанная идея - это уровень абстракции оборудования, присутствующий во многих операционных системах, который позволяет одной и той же ОС работать на разном оборудовании.
В исходном вопросе Turbo C аналогичен программе javac, а JVM - это OS / HAL.
источник
С помощью Java вы можете скомпилировать исходный код в Windows, а скомпилированный код (если быть точным, байт-код) можно выполнить (интерпретировать) на любой платформе, на которой работает JVM. Итак, да, вам нужна JVM, но JVM может запускать любой скомпилированный код, скомпилированный код не зависит от платформы .
Другими словами, у вас есть как переносимость исходного кода, так и переносимость скомпилированного кода.
На машине не обязательно должен быть компилятор C, машина должна использовать двоичный файл для конкретной платформы. С C или C ++ скомпилированный код специфичен для каждой архитектуры, он не зависит от платформы .
Другими словами, с C / C ++ у вас есть переносимость исходного кода (с некоторой дисциплиной), но не переносимость скомпилированного кода: вам необходимо перекомпилировать для каждой архитектуры в двоичные файлы, специфичные для платформы.
источник
JVM будет зависеть от платформы.
Но что бы он ни генерировал, это не зависит от платформы. [который мы назвали байт-кодом или просто, можно сказать ... файлом класса]. по этой причине Java называется платформенно-независимой.
вы можете запустить тот же файл класса на Mac и в Windows, но для этого потребуется JRE.
источник
байт-код не является независимым от формы, но его JVM делает байт-код независимым. Байт-код не совпадает с кодом. байт-коды - это компактные числовые коды, константы и ссылки (обычно числовые адреса), которые кодируют результат синтаксического анализа и семантического анализа таких вещей, как тип, объем и глубина вложенности программных объектов. Поэтому они обеспечивают гораздо лучшую производительность, чем прямая интерпретация исходного кода. байт-код необходимо интерпретировать перед выполнением, что всегда выполняется интерпретатором JVM.
источник
Просто примечание к обсуждению JVM и JIT-компиляции. Это тот же принцип, что и в C # и CLR и в некоторой степени в Python, и когда кто-то говорит, что код работает «непосредственно на оборудовании», что на самом деле верно в тех инструкциях, которые уже скомпилированы, можно будет воспользоваться преимуществами оптимизации. на машине / процессоре, на котором он запущен. Таким образом, даже если первоначальная компиляция модуля происходит довольно медленно, при следующем запуске этого модуля выполняемый код будет работать с собственной скоростью и, так сказать, будет выполняться непосредственно на оборудовании.
источник
Java не зависит от платформы с точки зрения разработчика Java, но это не относится к конечному пользователю, которому для запуска кода Java требуется платформенно-зависимая JVM. Обычно при компиляции кода Java создается байт-код, который обычно не зависит от платформы. Таким образом, разработчик должен написать единый код для всей серии платформ. Но это преимущество создает головную боль для конечного пользователя, которому необходимо установить JVM для запуска этого скомпилированного кода. Эта JVM отличается для каждой платформы. Таким образом, зависимость вступает в силу только для конечного пользователя.
источник
Javac - компилятор, преобразующий исходный код в байтовый код. JVM - интерпретатор, преобразующий байтовый код в код машинного языка.
Как мы знаем, java - это язык, основанный на компиляции ** r и ** интерпретатора . После компиляции java-кода, также известного как исходный код, он преобразуется в собственный код, известный как BYTE CODE, который является переносимым и может быть легко выполнен во всех операционных системах. Сгенерированный байт-код в основном представлен в шестнадцатеричном формате . Этот формат одинаков на всех платформах, будь то рабочая станция Solaris или Macintosh, Windows или Linux. После компиляции интерпретатор считывает сгенерированный байт-код и переводит его в соответствии с хост-машиной. . Байт-код интерпретируется виртуальной машиной Java, которая доступна во всех устанавливаемых нами операционных системах. поэтому для переноса программ Java на новую платформу все, что требуется, - это портировать интерпретатор и некоторые из библиотечных процедур.
Надеюсь, поможет!!!
источник
Когда мы компилируем исходные данные C, они генерируют собственный код, который может быть понят текущей операционной системой. Когда мы перемещаем этот исходный код в другую операционную систему, он не может быть понят операционной системой из-за нативного кода, что означает изменение представления от ОС к ОС. Таким образом, C или C ++ зависят от платформы.
Теперь в случае с java после компиляции мы получаем байт-код вместо нативного кода. Когда мы запустим байтовый код, он преобразуется в собственный код с помощью JVM, а затем будет выполнен.
Таким образом, Java не зависит от платформы, а C или C ++ не зависит от платформы.
источник
ну, хороший вопрос, но когда исходный код заменяется компилятором на промежуточный собственный байт-код, в котором он преобразует программу в байтовый код, выдавая ошибки сразу после всей проверки (если обнаружена), а затем программе нужен интерпретатор, который будет проверять программу построчно и напрямую преобразовывать ее в машинный код или объектный код, и каждая операционная система по умолчанию не может иметь интерпретатора java из-за некоторых соображений безопасности, поэтому вам нужно иметь jvm любой ценой, чтобы запустить его на этой другой платформе ОС Независимость, как вы сказали здесь, означает, что программу можно запускать в любой ОС, такой как unix, mac, linux, windows и т. д., но это не означает, что каждая ОС сможет запускать коды без jvm, в котором говорится о спецификации, реализации, и, например,если я продвинусь вперед, изменив конфигурацию вашего компьютера, чтобы у вас был загрузчик классов, который может открывать даже байтовый код, тогда вы также можете выполнять байтовый код Java, апплеты и т. д. -by nimish :) удачи
источник
Как это происходит?
ByteCode
Ответ : JVM имеет возможность читать и отвечать в соответствии с базовой ОС, поскольку JVM синхронизируется с ОС.Итак, мы обнаруживаем, что нам нужна JVM с синхронизацией с платформой.
Но главное, что программисту не нужно знать конкретные знания о Платформе и программировать свое приложение с учетом одной конкретной платформы.
Эта гибкость написания программы на Java --- компиляция
ByteCode
и запуск на любой машине (да, для ее выполнения необходима ЗАВИСИМАЯ от платформы JVM) делает Java платформенно независимой.источник
когда мы компилируем файл java, создается файл .class этой программы, в котором файл .class содержит байтовый код. Этот байтовый код не зависит от платформы, байтовый код может работать в любой операционной системе с использованием виртуальной машины Java. Независимость от платформы касается не только операционной системы, но и аппаратного обеспечения. Когда вы запускаете Java-приложение на 16-битной машине, которое вы сделали на 32-битной, вам не нужно беспокоиться о преобразовании типов данных в соответствии с целевой системой. Вы можете запустить свое приложение на любой архитектуре и получить одинаковый результат в каждой.
источник
Изменить: не совсем. См. Комментарии ниже.
Java напрямую ни на чем не работает. Его необходимо преобразовать в байт-код с помощью JVM.
Поскольку JVM существуют для всех основных платформ, это делает платформу Java независимой ЧЕРЕЗ JVM.
источник