JVM을 실행해야 할 때 Java 플랫폼에 어떻게 독립적입니까?


79

방금 Java를 배우기 시작했고 플랫폼 독립성에 대해 혼란 스럽습니다.

"독립적"이라는 것은 Java 코드가 모든 시스템에서 실행되어야하며 특별한 소프트웨어를 설치할 필요가 없다는 것을 의미하지 않습니까? 그러나 JVM이 시스템에 있어야합니다.

예를 들어, C / C ++ 소스 코드를 컴파일하고 실행하려면 Turbo C 컴파일러가 필요합니다. 기계에는 C 컴파일러가 있어야합니다.

누군가 Java가 "플랫폼 독립적"으로 설명 될 때 의미하는 바를 기쁘게 생각할 수 있습니까?


4
@aaa : 마지막으로 확인한 결과 Borland 웹 사이트에서 무료로 다운로드 할 수있었습니다.
dan04

1
예, Antique Software로 표시됩니다 ... ( edn.embarcadero.com/article/20841 ).
Matthew Flaschen

2
Turbo C (또는 다른 '네이티브'컴파일러)는 컴파일 된 프로그램을 실행하는 데 필요하지 않습니다. 컴파일러는 .exe파일을 생성 합니다. 기껏해야 .dll전체 컴파일러가 아닌 런타임 라이브러리 ( 파일 내)가 필요합니다
Javier

답변:


111

일반적으로 컴파일 된 코드는 CPU가 프로그램을 "실행"하는 데 필요한 정확한 명령 집합입니다. Java에서 컴파일 된 코드는 모든 물리적 시스템에서 동일하게 작동하는 데 필요한 "가상 CPU"에 대한 정확한 명령 집합입니다.

그래서 어떤 의미에서 자바 언어의 설계자들은 언어와 컴파일 된 코드가 플랫폼 독립적이 될 것이라고 결정했지만 결국 코드는 물리적 플랫폼에서 실행되어야하기 때문에 모든 플랫폼 종속 코드를 JVM.

JVM에 대한이 요구 사항은 Turbo C 예제와 대조됩니다. Turbo C를 사용하면 컴파일러가 플랫폼 종속 코드를 생성하고 컴파일 된 Turbo C 프로그램이 CPU에 의해 직접 실행될 수 있기 때문에 JVM과 유사한 작업이 필요하지 않습니다.

Java를 사용하면 CPU는 플랫폼에 따라 JVM을 실행합니다. 이 실행중인 JVM은 실행 가능한 JVM이있는 경우 플랫폼 독립적 인 Java 바이트 코드를 실행합니다. Java 코드를 작성하고 실제 머신에서 실행할 코드를 프로그래밍하지 않고 Java 가상 머신에서 실행할 코드를 작성한다고 말할 수 있습니다.

이 모든 Java 바이트 코드가 모든 Java 가상 머신에서 작동하는 유일한 방법은 Java 가상 머신의 작동 방식에 대해 다소 엄격한 표준이 작성되었다는 것입니다. 즉, 어떤 물리적 플랫폼을 사용하든 Java 바이트 코드가 JVM과 인터페이스하는 부분은 단방향으로 만 작동합니다. 모든 JVM이 정확히 동일하게 작동하기 때문에 동일한 코드가 다시 컴파일하지 않고도 모든 곳에서 동일하게 작동합니다. 동일한 지 확인하기위한 테스트를 통과 할 수없는 경우 가상 머신을 "Java 가상 머신"이라고 부를 수 없습니다.

물론 자바 프로그램의 이식성을 깨는 방법이 있습니다. 하나의 운영 체제에서만 발견되는 파일을 찾는 프로그램을 작성할 수 있습니다 (예 : cmd.exe). JNI를 사용하면 컴파일 된 C 또는 C ++ 코드를 클래스에 효과적으로 넣을 수 있습니다. 특정 운영 체제에서만 작동하는 규칙을 사용할 수 있습니다 (예 : ":"가 디렉토리를 구분한다고 가정). 그러나 JNI와 같은 특별한 작업을 수행하지 않는 한 다른 컴퓨터에서 프로그램을 다시 컴파일 할 필요가 없습니다.


1
"모든 JVM이 정확히 동일하게 작동하기 때문에 동일한 코드가 재 컴파일없이 모든 곳에서 정확히 동일하게 작동합니다." 이 문장은 무엇을 의미합니까? JVM이 설치된 다른 시스템에서 동일한 프로그램을 실행할 때마다 항상 "javac filename.java"를 수행합니다. (예를 들어 간단한 프로그램을 사용하십시오.) 프로그램을 다시 컴파일 할 필요가 없다면 "다시 컴파일하지 않고도 동일한 코드를 어디에서나 실행할 수 있습니까?"라고 말하는 이유는 무엇입니까? 설명 해주십시오.
Karan Thakkar

3
자바 소스 코드를 컴파일해야하므로 "javac filename.java"가 필요합니다. 그러나 한 번만 필요하며 사용되는 모든 시스템에서 필요하지 않습니다 (C 및 C ++와 다름). CPU, 32/64 비트 시스템, 바이트 순서 등을 변경해도 코드는 계속 실행됩니다. 이는 출력 "filename.class"에 JVM에 대한 지침 인 바이트 코드가 포함되어 있기 때문입니다. 모든 JVM이 기능적으로 동일하기 때문에 코드가 컴파일되면 소스 코드 없이도 모든 Java 가상 머신에서 해당 바이트 코드를 실행할 수 있습니다. 시도해보세요. 또한 컴파일과 재 컴파일을 혼동하는 주석이 있습니다.
Edwin Buck

@KaranThakkar-Edwin이 말하려는 것의 확장이 될 수 있다고 생각합니다. 컴파일하지 않고도 모든 플랫폼의 프로젝트에서 동일한 .jar 파일을 쉽게 사용할 수 있습니다.
vanguard69

54
            Technical Article on How java is platform indepedent?

세부 사항으로 들어가기 전에 먼저 플랫폼의 의미를 이해해야합니까? 플랫폼은 컴퓨터 하드웨어 (주로 마이크로 프로세서 아키텍처)와 OS로 구성됩니다. 플랫폼 = 하드웨어 + 운영 체제

플랫폼에 독립적 인 것은 모든 운영 체제 및 하드웨어에서 실행할 수 있습니다.

Java는 플랫폼에 독립적이므로 Java는 모든 운영 체제 및 하드웨어에서 실행할 수 있습니다. 이제 질문은 어떻게 플랫폼 독립적입니까?

이는 OS에 무관 한 Byte Code의 마법 때문입니다. 자바 컴파일러가 코드를 컴파일 할 때 C 컴파일러와 달리 머신 네이티브 코드가 아닌 바이트 코드를 생성합니다. 이제이 바이트 코드는 기계에서 실행하기 위해 인터프리터가 필요합니다. 이 인터프리터는 JVM입니다. 그래서 JVM은 그 바이트 코드를 읽고 (즉, 기계 독립적) 그것을 실행합니다. 다른 JVM은 다른 OS를 위해 설계되었으며 바이트 코드는 다른 OS에서 실행될 수 있습니다.

C 또는 C ++ (플랫폼 독립적이 아닌 언어) 컴파일러의 경우 OS 종속적 인 .exe 파일을 생성하므로 다른 OS에서이 .exe 파일을 실행할 때이 파일이 OS 종속적이기 때문에 실행되지 않습니다. 다른 OS.

마지막으로 중간 OS 독립 바이트 코드는 자바 플랫폼을 독립적으로 만듭니다.


5
이것은 어리석은 대답입니다. 자바 플랫폼을 독립적으로 만드는 것은 자바가 VM에 의존한다는 사실입니다. VM이 OS 작업에 대한 호출을 충족하는 한 어떤 OS에서 실행 중인지 신경 쓰지 않습니다. 그리고 VM 자체는 플랫폼 독립적이지 않습니다. C / C ++ 언어로 제공 한 비교는 가짜였습니다. 바로 그 플랫폼에서 소스 코드를 컴파일하면 실행될 것입니다. 왜 그 명령어 세트를 다른 플랫폼으로 가져 가서 실행될 것이라고 어리석게 기대합니까? Java 소스 코드를 ARM으로 가져와 내 custom_processor 용으로 컴파일 된 VM에서 실행될 것으로 기대할 수 있습니까?
Abhinav Gauniyal

JVM의 디자인은 동일합니다. 오라클은 모든 머신에 대해 서로 다른 JVM을 설계하는 데 열광 할 것입니다. 유일한 차이점은 일부 컴퓨터에서 실행하려는 프로그램의 바이트 코드입니다. 각 프로그램은 다른 유형의 바이트 코드를 생성합니다. 바이트 코드 파일은 JVM 및 CPU가 명령 세트를 이해하고 실행하기위한 16 진 형식입니다.
Karan Thakkar

26

이는 Java 프로그래머가 (이론적으로) 기계 또는 OS 세부 사항을 알 필요가 없음을 의미합니다. 이러한 세부 정보가 존재하며 JVM 및 클래스 라이브러리가이를 처리합니다. 또한 C와는 대조적으로 Java 바이너리 (바이트 코드)는 수정하거나 재 컴파일하지 않고도 완전히 다른 시스템으로 이동할 수 있습니다.


10
"... 자바 바이너리 (바이트 코드)는 종종 재 컴파일없이 완전히 다른 아키텍처로 이동할 수 있습니다.". 실제로 그들은 항상 할 수 있습니다. 재 컴파일은 최신 JVM 용으로 컴파일 된 코드를 이전 JVM으로 이동할 때만 필요합니다.
Stephen C

@Stephen, "시스템"으로 변경했습니다. JNA 또는 JNI를 사용하여 단일 아키텍처 용으로 만 작성된 라이브러리에 연결하는 등 이식성을 방해 할 수있는 여러 요소가 있습니다.
Matthew Flaschen

1
JNA 또는 JNI가 나에게 유일한 요소 인 것처럼 보이며 실제 사용에서는 매우 드뭅니다. 그럼에도 불구하고 바이트 코드는 재 컴파일하지 않고도 항상 이동할 수 있습니다. JNI가 예상하는 라이브러리를 다시 컴파일해야 할 수도 있습니다. 그래도 바이트 코드는 여전히 이식 가능합니다.
Kendall Helmstetter Gelner

동의했습니다 ... 그러나 그 어떤 경우에도 "Java 바이너리 (바이트 코드)"를 재 컴파일하는 것은 약간의 차이를 만들지 않습니다 !!
Stephen C

한 가지 질문이 있습니다. 컴파일 된 Java 바이트 코드가 OS 커널과 상호 작용합니까? 그렇다면 커널 기능이 다르기 때문에 동일한 바이트 코드를 다른 커널에 적용 할 수 없습니까? 또는 JVM은 모든 커널 아주 믿을 수있는 모든 다른 커널에 대한 기능 ... 포함
henryyao

9

아니, 그 반대입니다. Java 프로그램이 독립적 인 가상 머신을 사용하기 때문입니다.

가상 머신은 독립적이지 않으므로 시스템 유형에 맞게 특별히 제작 된 가상 머신을 설치해야합니다. 가상 머신은 운영 체제 위에 독립적 인 플랫폼을 생성합니다.


8

JVM은 다른 시스템에 설치할 수있는 "시뮬레이션 된 기계"입니다. 이런 방식으로 동일한 Java 코드가 운영 체제 자체가 아닌 JVM에 의존하기 때문에 다른 시스템에서 실행할 수 있습니다.

즉, 프로그래머가 특정 시스템 및 OS 기능 대신 가상 시스템 (JVM)과 통신하고 해당 기능을 활용할 수 있습니다. Java는 JVM에만 의존하므로 플랫폼에 독립적입니다 (플랫폼에 JVM이 설치된 경우).

간단히 말해서 Java는 플랫폼에 독립적이지 않으므로 실행해야하는 모든 시스템에 대해 JVM 설치가 필요합니다. 그러나 JVM이 설치된 모든 시스템에서 실행됩니다.


4

Java는 JVM (Java Virtual Machine)이 있으므로 플랫폼에 독립적입니다. 실생활의 예를 들어 설명하겠습니다. 가족에게 자유 롭다고 가정 해 봅시다. 그런데 왜?

당신은 그들을 잘 알고 그들도 당신을 알고 있기 때문입니다. 그러나 당신은 내 가족에게 자유롭지 않습니다. 당신이 그들을 모르고 그들도 당신을 모르기 때문입니다. 하지만 내가 당신의 친구이고 가족들에게 당신을 소개 할 수 있다면 당신은 그들과 자유롭게 대화 할 수있을 것입니다.

비슷한 방식으로, 당신이 코드이고 내가 JVM이라면. 또한 가족은 Windows 플랫폼이고 내 가족은 Linux 플랫폼입니다. C 또는 기타 플랫폼 종속 언어 인 경우 가족 구성원 만 알고 그 반대의 경우도 마찬가지입니다. 그렇기 때문에 귀하가 작성한 플랫폼 만이 해당 코드를 알고 지원할 것입니다. 그러나 당신이 JAVA 코드이고 우리 가족에게 올 때. Linux 플랫폼과 저를 찾으면 JVM, 내 가족 인 Linux 플랫폼을 소개해 드릴 수 있습니다. 그러면 상호 작용할 수 있습니다.

플랫폼 의존 언어의 경우, 어떤 플랫폼 제품군에 자신을 소개 할 수있는 JVM과 같은 친구가 없습니다. 이것이 Java가 플랫폼에 독립적 인 방식입니다. :)


3

JVM은 구체적인 플랫폼에서 추상화됩니다. 프로그램은 JVM에만 의존하고 JVM은 Windows 및 Linux와 같은 다른 플랫폼에서 사용할 수 있으므로 프로그램은 플랫폼 독립적입니다 (하지만 jvm에 따라 다름).


3

c / c ++에서 컴파일러를 사용하여 컴파일 한 후 소스 코드 (c 프로그램 파일)는 원시 기계 코드 (코드를 컴파일하는 특정 기계에서 이해할 수 있음)로 직접 변환됩니다. 따라서 c / c ++의 컴파일 된 코드는 다른 OS에서 실행할 수 없습니다.

그러나 Java의 경우 : Java (.java)의 소스 파일은 모든 OS (Physical System)에 설치된 모든 JVM이 이해할 수있는 Byte 코드 (.class 파일)를 제공하는 JAVAC 컴파일러 (JDK에 있음)를 사용하여 컴파일됩니다. .

여기서 우리는 코드를 실행하려는 다른 운영 체제에 대해 다른 JVM (플랫폼에 따라 다름)이 필요하지만 .class 파일 (컴파일 된 코드 / 중간 코드)은 설치된 모든 JVM이 이해할 수 있기 때문에 동일하게 유지됩니다. 모든 OS에서.

c / c ++ : 소스 코드 만 기계에 독립적입니다. Java에서 : 소스 코드와 컴파일 된 코드는 모두 플랫폼에 독립적입니다.

이것은 자바 플랫폼 (머신)을 독립적으로 만듭니다.


3

Java는 플랫폼 독립적이 아니며 자체는 플랫폼이며 Java 앱이 실행되는 플랫폼을 기반으로하지만 Java 플랫폼 자체는 플랫폼에 따라 다릅니다.


2

1:jvm(예 : 자바 가상 머신)은라는 폴더 (즉, 중간 수준 형식의 프로그램 모음)에 존재하는 다양한 기능을 제공하는 많은 파일을 포함하는 프로그램 모음입니다 packages. 파일 또는 자바 애플리케이션 만 실행하는 데 도움이되는 곳에 jvm과부하가 걸리지 않도록 도와 주며, 자바 컴파일러에 의해 컴파일 된 후 동등성 중간 수준 형식을 만들고 바이트 코드 (.class 파일) 표현을 제공하는 데 도움이됩니다. 및에 한정되지 않습니다 . 2 : jvm은 바이트 코드를 3 : jvm으로 만듭니다. 제어가 실행을 마친 후 램에서 메모리 할당을 해제합니다.o/s.classo/sprocessor
.exe 프로세서가 이해할 파일로 만들고 frm 바이트 코드를 수신 한 후 모든 함수에 대한 메모리 할당을 확인합니다.


2

JVM은 OS에 따라 다릅니다. 모든 OS JVM마다 다릅니다.

".class"는 모든 JVM에서 동일합니다. 따라서 모든 JVM은 ".class"파일 데이터를 이해합니다.

Windows 종속 JVM은 Windows에 Windows 종속 명령을 제공합니다. Linux 종속 JVM은 Linux에 Linux 종속 명령을 제공합니다.

다른 운영 체제에서도 마찬가지입니다. 따라서 java는 모든 운영 체제에서 실행됩니다.

이것이 자바가 OS에 독립적 인 이유입니다.


2

간단히 말해서 :

Java 프로그래밍 언어 는 플랫폼에 독립적입니다.

JVM 은 플랫폼에 따라 다릅니다.


1

Java는 JVM에서 실행된다는 점에서 플랫폼 독립적이지 않습니다. 즉, 가장 일반적인 OS 플랫폼 (및 일부 임베디드 어플라이언스)에서 구체적인 구현이있는 단일 추상 시스템에 대한 프로그래밍을 통해 플랫폼 독립성을 확보합니다.

관련 아이디어는 동일한 OS가 서로 다른 하드웨어에서 실행될 수 있도록하는 많은 운영 체제에 존재하는 하드웨어 추상화 계층입니다.

원래 질문에서 Turbo C는 javac 프로그램과 유사하며 JVM은 OS / HAL입니다.


1

독립적이지 않다는 것은 Java 코드가 모든 시스템에서 실행될 수 있어야하며 특별한 소프트웨어를 설치할 필요가 없다는 것을 의미합니까 (이 경우에는 시스템에 JVM이 있어야 함)?

Java를 사용하면 Windows에서 소스 코드를 컴파일 할 수 있으며 컴파일 된 코드 (정확히 바이트 코드)를 JVM을 실행하는 모든 플랫폼에서 실행 (해석) 할 수 있습니다. 예, JVM이 필요하지만 JVM은 컴파일 된 코드를 실행할 수 있으며 컴파일 된 코드는 플랫폼에 독립적 입니다.

즉, 소스 코드의 이식성과 컴파일 된 코드의 이식성을 모두 가지고 있습니다.

예를 들어, C / C ++ 소스 코드를 컴파일 한 다음 실행하려면 Turbo C Compiler가 있어야합니다. 기계에는 C 컴파일러가 있어야합니다.

기계는 C 컴파일러를 가질 필요가 없으며, 기계는 플랫폼 특정 바이너리를 사용해야합니다. C 또는 C ++를 사용하는 경우 컴파일 된 코드 는 각 아키텍처에 따라 다르며 플랫폼에 독립적 입니다.

즉, C / C ++를 사용하면 소스 코드의 이식성은 있지만 컴파일 된 코드의 이식성은 없습니다. 각 아키텍처에 대해 플랫폼 별 바이너리로 다시 컴파일해야합니다.


1

JVM은 플랫폼에 따라 다릅니다.
그러나 그것이 생성하는 것은 플랫폼 독립적입니다. [우리는 바이트 코드라고 부르거나 간단히 클래스 파일이라고 말할 수 있습니다]. 그래서 Java는 플랫폼 독립적이라고 불립니다.
Mac에서도 Windows에서도 동일한 클래스 파일을 실행할 수 있지만 JRE가 필요합니다.


0

바이트 코드는 플레이트 형식에 독립적 인 것이 아니라 바이트 코드를 독립적으로 만드는 JVM입니다. 바이트 코드는 매치 인 코드가 아닙니다. 바이트 코드는 압축 된 숫자 코드, 상수 및 참조 (일반적으로 숫자 주소)로, 유형, 범위 및 프로그램 객체의 중첩 깊이와 같은 것의 구문 분석 및 의미 분석 결과를 인코딩합니다. 따라서 소스 코드를 직접 해석하는 것보다 훨씬 나은 성능을 제공합니다. 바이트 코드는 JVM 인터프리터에 의해 항상 수행되는 실행 전에 해석되어야합니다.


0

JVM 및 JIT 컴파일에 대한 논의에 대한 참고 사항입니다. 이것은 C # 및 CLR과 어느 정도 Python에서와 동일한 원칙이며, 누군가가 코드가 "하드웨어에서 직접"실행된다고 말하면 이미 컴파일 된 명령이 최적화를 활용할 수 있다는 사실입니다. 컴퓨터 / cpu에서 실행되고 있습니다. 따라서 모듈의 초기 컴파일이 다소 느리더라도 다음에이 모듈이 실행될 때 실행되는 코드는 기본 속도로 실행되므로 하드웨어에서 직접 실행됩니다.


0

Java는 Java 개발자 측면에서 플랫폼 독립적이지만 Java 코드를 실행하기 위해 플랫폼 종속 JVM이 필요한 최종 사용자에게는 해당되지 않습니다. 기본적으로 Java 코드가 컴파일되면 일반적으로 플랫폼에 독립적 인 바이트 코드가 생성됩니다. 따라서 개발자는 전체 플랫폼 시리즈에 대해 단일 코드를 작성해야합니다. 그러나 이러한 이점은 컴파일 된 코드를 실행하기 위해 JVM을 설치해야하는 최종 사용자에게 골칫거리가됩니다. 이 JVM은 모든 플랫폼에 따라 다릅니다. 따라서 종속성은 최종 사용자에게만 적용됩니다.


0

Javac – 소스 코드를 바이트 코드로 변환하는 컴파일러. JVM- 바이트 코드를 기계어 코드로 변환하는 인터프리터.

우리가 알고 있듯이 자바는 컴파일러와 ** 통역사 기반 언어입니다. 소스 코드라고도하는 자바 코드가 컴파일되면, 이식 가능하고 모든 운영 체제에서 쉽게 실행할 수있는 BYTE CODE라는 네이티브 코드로 변환됩니다. 생성 된 바이트 코드는 기본적으로 16 진수 형식 으로 표시 됩니다 . 이 형식은 Solaris 워크 스테이션이나 Macintosh, Windows 또는 Linux와 같은 모든 플랫폼에서 동일합니다. 컴파일 후 인터프리터는 생성 된 바이트 코드를 읽고 호스트 머신에 따라 번역합니다. . 바이트 코드는 설치 한 모든 운영 체제에서 사용할 수있는 Java Virtual Machine에 의해 해석됩니다. 따라서 Java 프로그램을 새 플랫폼으로 이식하려면 인터프리터와 일부 라이브러리 루틴을 이식하기 만하면됩니다.

도움이 되었기를 바랍니다 !!!


0

C 소스 데이터를 컴파일하면 현재 운영 체제에서 이해할 수있는 네이티브 코드가 생성됩니다. 이 소스 코드를 다른 운영 체제로 옮길 때 OS에서 OS로 표현이 변경됨을 의미하는 네이티브 코드로 인해 운영 체제에서 이해할 수 없으므로 C 또는 C ++는 플랫폼에 따라 다릅니다.

이제 자바의 경우 컴파일 후 네이티브 코드 대신 바이트 코드를 얻습니다. 바이트 코드를 실행하면 JVM의 도움으로 원시 코드로 변환되어 실행됩니다.

따라서 Java는 플랫폼 독립적이고 C 또는 C ++는 플랫폼 독립적이지 않습니다.


0

좋은 질문이지만 컴파일러에 의해 소스 코드가 중간 네이티브 바이트 코드로 변경 될 때 전체 검사 후 오류를 한 번에 제공하여 프로그램을 바이트 코드로 변환 한 다음 프로그램에는 인터프리터가 필요합니다. 프로그램을 한 줄씩 확인하고 직접 기계 코드 또는 개체 코드로 변경하고 기본적으로 각 운영 체제는 보안상의 이유로 Java 인터프리터를 가질 수 없으므로 다른 OS 플랫폼에서 실행하려면 어떤 비용 으로든 jvm이 필요합니다. 여기서 말했듯이 독립성은 프로그램이 유닉스, 맥, 리눅스, 윈도우 등과 같은 모든 OS에서 실행될 수 있음을 의미하지만, 이것은 각각의 모든 OS가 사양, 구현, 즉 jvm없이 코드를 실행할 수 있다는 것을 의미하지는 않습니다. 및 인스턴스,만약 내가 당신의 PC의 설정을 변경하여 바이트 코드까지도 열 수있는 클래스 로더를 가질 수 있다면 당신은 또한 자바 바이트 코드, 애플릿 등을 실행할 수 있습니다. -by nimish :) 행운을 빕니다


0

{App1 (Java 코드) ------> App1byteCode} ........ {(JVM + MacOS) App1, App2, App3} 관련 도움말

{App2 (Java Code) -----> App2byteCode} ........ {(JVM + LinuxOS) App1, App2, App3} 관련 도움말

{App3 (Java Code) -----> App3byteCode} ........ {(JVM + WindowsOS) App1, App2, App3} 관련 도움말

어떻게 된 일입니까?

정답 : JVM은 ByteCode기본 OS에 따라 읽고 응답 할 수 있습니다. JVM이 OS와 동기화되어 있기 때문입니다.

그래서 우리는 Sync with Platform이있는 JVM이 필요하다는 것을 알게되었습니다.

그러나 가장 중요한 것은 프로그래머가 플랫폼에 대한 특정 지식을 알 필요가 없으며 하나의 특정 플랫폼을 염두에두고 자신의 애플리케이션을 프로그래밍 할 필요가 없다는 것입니다.

Java로 프로그램을 작성하는이 유연성은 ByteCode모든 머신에서 컴파일 및 실행됩니다 (예 : 실행하려면 Platform DEPENDENT JVM이 필요함).


-1

Java 파일을 컴파일하면 해당 프로그램의 .class 파일이 생성되고 .class 파일에는 바이트 코드가 포함되어 있습니다. 해당 바이트 코드는 플랫폼 독립적이며, 바이트 코드는 Java 가상 머신을 사용하는 모든 운영 체제에서 실행할 수 있습니다. 플랫폼 독립성은 운영 체제뿐만 아니라 하드웨어에 대해서도 마찬가지입니다. 32 비트에서 만든 16 비트 컴퓨터에서 Java 응용 프로그램을 실행하면 대상 시스템에 따라 데이터 유형을 변환하는 것에 대해 걱정할 필요가 없습니다. 모든 아키텍처에서 앱을 실행할 수 있으며 각각 동일한 결과를 얻을 수 있습니다.


-3

편집 : 정답이 아닙니다. 아래 설명을 참조하십시오.

Java는 아무것도 직접 실행하지 않습니다. JVM에 의해 바이트 코드로 변환되어야합니다.

JVM은 모든 주요 플랫폼에 존재하기 때문에 JVM을 통해 Java 플랫폼에 독립적입니다.


1
JVM은 바이트 코드를 해석하거나 JIT합니다. 컴파일되지 않습니다.
Matthew Flaschen

예. "JVM 용"이 더 정확합니다.
polygenelubricants

1
jopdesign.com ~ 다시 시도 할 수 있습니다. 이 사람들은 하드웨어에서 직접 실행할 수 있다고 말합니다.
jcolebrand
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.