В чем разница между «архитектурно-нейтральным» и «портативным»? - PullRequest
8 голосов
/ 27 апреля 2011

Я читаю книгу Герберта Шильдта "Java: полный справочник", и там он пишет, что Java является портативной и независимой от архитектуры. В чем разница между этими двумя понятиями? Я не мог понять это из текста.

Ответы [ 9 ]

9 голосов
/ 27 апреля 2011

Переносимая программа на C:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    printf("Hello, World!");

    return (EXIT_SUCCESS);
}

Вы можете взять эту программу на C и скомпилировать ее на любой машине с помощью компилятора C и заставить ее работать (при условии, что она поддерживает printf ... Я предполагаю некоторые вещитам может и не быть).

Если вы скомпилируете его в Windows и попытаетесь запустить этот двоичный файл на Mac, он не будет работать.

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

Итак, переносимый - это идея исходного кода, а архитектурно-нейтральный - это исполняемая идея.

8 голосов
/ 27 апреля 2011

Взгляните на этот технический документ по Java .

По сути, они говорят, что помимо работы в нескольких средах (из-за интерпретации в JVM), они такжеработает одинаково независимо от среды.Первое - это то, что делает его портативным, второе - то, что делает его нейтральным к архитектуре.Например, размер int не зависит от платформы;это установлено JVM.

2 голосов
/ 27 апреля 2011

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

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

Для переносимых это означаетНет никаких зависящих от реализации аспектов спецификации.Например, в C ++ int может быть 16-разрядным или 32-разрядным, в зависимости от того, кто реализует спецификацию, где, как в Java, int всегда 32-разрядный.

Я получил информацию из другой книги (Core Java2: Основы), поэтому он может отличаться от его значения.Вот ссылка: Core Java 2: Основы

1 голос
/ 28 августа 2012

в java есть 3 связанных функции.

  1. не зависит от платформы -> это означает, что java-программа может быть запущена на любой ОС без учета ее поставщика.Это реализуется с помощью ВОЛШЕБНОГО КОДА, называемого «КОД БАЙТА».Затем JVM либо интерпретирует это во время выполнения, либо использует компиляцию JIT (Just in Time), чтобы скомпилировать его в машинный код для архитектуры, на которой выполняется (например, i386).
  2. архитектура нейтральна -> это означает javaПрограмма может быть запущена на любом процессоре независимо от его производителя и архитектуры.таким образом это избегает проблемы восстановления.
  3. portable -> язык / технология программирования считается чисто переносимой, если она удовлетворяет двум вышеуказанным функциям.
1 голос
/ 27 апреля 2011

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

например. Сериализованные объекты из 32-битной системы Windows можно читать в 64-битной системе Linux.

1 голос
/ 27 апреля 2011

С архитектурой, независимой, книга означает, что байт-код не зависит от базовой платформы, на которой работает программа. Например, не имеет значения, является ли ваша операционная система 32-битной или 64-битной, байт-код Java точно такой же. Вам не нужно перекомпилировать исходный код Java для 32-битной или 64-битной версии. (Таким образом, «архитектура» относится к архитектуре процессора).

«Переносимый» означает, что программа, написанная для запуска в одной операционной системе, работает в другой операционной системе без каких-либо изменений. С Java вам даже не нужно перекомпилировать исходный код; файл * .class, скомпилированный в Windows, например, работает в Linux, Mac OS X или любой другой ОС, для которой у вас есть доступная виртуальная машина Java.

Обратите внимание, что вы должны позаботиться о некоторых вещах, чтобы сделать ваш Java-код действительно переносимым. Например, если вы жестко закодировали пути к файлам в стиле Windows (C: \ Users \ Myself ...) в своем приложении Java, оно не будет работать в других операционных системах.

0 голосов
/ 09 декабря 2015

В терминах Java

Нейтральная архитектура Java - здесь речь идет об архитектуре операционной системы, то есть java. Создайте промежуточный байт-код (двоичный код) (обрабатывается JVM) и разрешите код java.работать в любой ОС, для которой у вас есть доступная виртуальная машина Java (независимо от ее архитектуры ОС для управления распределением памяти, кэширования, обработки регистров, обработки битового кода 32 или 64 бит при интерпретации кода, как каждый интерпретатор выполняет строку кода с помощьюline - это дескриптор jvm в отношении конфигурации аппаратного обеспечения и ОС).

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

Java Portable означает, что машинный код Java записывается на одной машине и будет работать на любой машине с надлежащей JVM относительно ОС

.
0 голосов
/ 22 октября 2014

В чем разница между архитектурой Neutral и Portable?Нейтральная архитектура: Java является нейтральным языком архитектуры, потому что java позволяет своему приложению компилироваться на одной аппаратной архитектуре и выполнять на другой аппаратной архитектуре.Переносимый: Java является переносимым языком программирования, потому что java может выполнять свое приложение и всю операционную систему и всю аппаратную систему.

0 голосов
/ 22 ноября 2013
Файл

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

...