방금 Java를 배우기 시작했고 플랫폼 독립성에 대해 혼란 스럽습니다.
“독립적”이라는 것은 Java 코드가 모든 시스템에서 실행되어야하며 특별한 소프트웨어를 설치할 필요가 없다는 것을 의미하지 않습니까? 그러나 JVM이 시스템에 있어야합니다.
예를 들어, C / C ++ 소스 코드를 컴파일하고 실행하려면 Turbo C 컴파일러가 필요합니다. 기계에는 C 컴파일러가 있어야합니다.
누군가 Java가 “플랫폼 독립적”으로 설명 될 때 의미하는 바를 기쁘게 생각할 수 있습니까?
답변
일반적으로 컴파일 된 코드는 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와 같은 특별한 작업을 수행하지 않는 한 다른 컴퓨터에서 프로그램을 다시 컴파일 할 필요가 없습니다.
답변
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 독립 바이트 코드는 자바 플랫폼을 독립적으로 만듭니다.
답변
이는 Java 프로그래머가 (이론적으로) 기계 또는 OS 세부 사항을 알 필요가 없음을 의미합니다. 이러한 세부 정보가 존재하며 JVM 및 클래스 라이브러리가이를 처리합니다. 또한 C와는 대조적으로 Java 바이너리 (바이트 코드)는 수정하거나 재 컴파일하지 않고도 완전히 다른 시스템으로 이동할 수 있습니다.
답변
아니, 그 반대입니다. Java 프로그램이 독립적 인 가상 머신을 사용하기 때문입니다.
가상 머신은 독립적이지 않으므로 시스템 유형에 맞게 특별히 제작 된 가상 머신을 설치해야합니다. 가상 머신은 운영 체제 위에 독립적 인 플랫폼을 생성합니다.
답변
JVM은 다른 시스템에 설치할 수있는 “시뮬레이션 된 기계”입니다. 이런 방식으로 동일한 Java 코드가 운영 체제 자체가 아닌 JVM에 의존하기 때문에 다른 시스템에서 실행할 수 있습니다.
즉, 프로그래머가 특정 시스템 및 OS 기능 대신 가상 시스템 (JVM)과 통신하고 해당 기능을 활용할 수 있습니다. Java는 JVM에만 의존하므로 플랫폼에 독립적입니다 (플랫폼에 JVM이 설치된 경우).
간단히 말해서 Java는 플랫폼에 독립적이지 않으므로 실행해야하는 모든 시스템에 대해 JVM 설치가 필요합니다. 그러나 JVM이 설치된 모든 시스템에서 실행됩니다.
답변
Java는 JVM (Java Virtual Machine)이 있으므로 플랫폼에 독립적입니다. 실생활의 예를 들어 설명하겠습니다. 가족에게 자유 롭다고 가정 해 봅시다. 그런데 왜?
당신은 그들을 잘 알고 그들도 당신을 알고 있기 때문입니다. 그러나 당신은 내 가족에게 자유롭지 않습니다. 당신이 그들을 모르고 그들도 당신을 모르기 때문입니다. 하지만 내가 당신의 친구이고 가족들에게 당신을 소개 할 수 있다면 당신은 그들과 자유롭게 대화 할 수있을 것입니다.
비슷한 방식으로, 당신이 코드이고 내가 JVM이라면. 또한 가족은 Windows 플랫폼이고 내 가족은 Linux 플랫폼입니다. C 또는 기타 플랫폼 종속 언어 인 경우 가족 구성원 만 알고 그 반대의 경우도 마찬가지입니다. 그렇기 때문에 귀하가 작성한 플랫폼 만이 해당 코드를 알고 지원할 것입니다. 그러나 당신이 JAVA 코드이고 우리 가족에게 올 때. Linux 플랫폼과 저를 찾으면 JVM, 내 가족 인 Linux 플랫폼을 소개해 드릴 수 있습니다. 그러면 상호 작용할 수 있습니다.
플랫폼 의존 언어의 경우, 어떤 플랫폼 제품군에 자신을 소개 할 수있는 JVM과 같은 친구가 없습니다. 이것이 Java가 플랫폼에 독립적 인 방식입니다. 🙂
답변
JVM은 구체적인 플랫폼에서 추상화됩니다. 프로그램은 JVM에만 의존하고 JVM은 Windows 및 Linux와 같은 다른 플랫폼에서 사용할 수 있으므로 프로그램은 플랫폼 독립적입니다 (하지만 jvm에 따라 다름).