Java Virtual Machine(JVM),차이는 JDK,JRE&JVM–Core Java
Java 는 높은 수준의 프로그래밍 언어입니다. 높은 수준의 언어로 작성된 프로그램은 모든 컴퓨터에서 직접 실행할 수 없습니다. 먼저 특정 기계어로 번역해야합니다. Javac 컴파일러는이 작업을 수행하며 java 프로그램(.소스 코드를 포함하는 자바 파일)및 기계 코드로 변환(바이트 코드라거나.클래스 파일).,
Jvm(Java Virtual Machine)은 실제 컴퓨터(컴퓨터)에 상주하는 가상 머신이며 JVM 의 기계어는 바이트 코드입니다. 이렇게하면 각 유형의 머신에 대해 다른 머신 코드가 아닌 JVM 에 대한 바이트 코드를 생성해야하므로 컴파일러가 더 쉬워집니다. JVM 은 컴파일러에 의해 생성 된 바이트 코드를 실행하고 출력을 생성합니다. JVM 은 java 플랫폼을 독립적으로 만드는 것입니다.
그래서,이제 우리는 jvm 의 기본 기능이 컴파일러에 의해 생성 된 바이트 코드를 실행하는 것임을 이해했습니다., 각 운영 체제마다 jvm 이 다르지만 바이트 코드 실행 후 생성하는 출력은 모든 운영 체제에서 동일합니다. 즉,Windows 에서 생성 된 바이트 코드를 Mac OS 에서 실행할 수 있으며 그 반대도 마찬가지입니다. 이것이 자바를 플랫폼 독립 언어로 부르는 이유입니다. 같은 일을 볼 수 있는 아래 그림에서
이를 요약하면 모든 것:Java Virtual machine(JVM)은 가상 컴퓨터에서 실행하는 실제 기기(컴퓨터)와 실행 Java 바이트 코드입니다., JVM 은 Java 소스 코드를 이해하지 못하기 때문에*를 컴파일하는 javac 컴파일러가 필요합니다.*를 얻기 위해 자바 파일.JVM 이 이해하는 바이트 코드를 포함하는 클래스 파일. JVM 은 java 를 이식 가능하게 만듭니다(한 번 쓰고 어디서나 실행). 각 운영 체제마다 jvm 이 다르지만 바이트 코드 실행 후 생성하는 출력은 모든 운영 체제에서 동일합니다.
JVM 건축
을 볼 수 있습니다 JVM 작동합니다:
클래스로더:클래스 로더를 읽습니다.,클래스 파일 및 메소드 영역에 바이트 코드를 저장합니다.
메소드 영역:모든 클래스간에 공유되는 JVM 에는 하나의 메소드 영역 만 있습니다. 이것은 각각의 클래스 레벨 정보를 보유합니다.클래스 파일.
힙:힙은 객체가 할당 된 JVM 메모리의 일부입니다. JVM 은 각각에 대해 클래스 객체를 만듭니다.클래스 파일.
Stack:Stack 은 JVM 메모리의 일부이기도하지만 힙과 달리 임시 변수를 저장하는 데 사용됩니다.
PC 레지스터:이것은 어떤 명령이 실행되었고 어떤 명령이 실행될 것인지를 추적합니다., 명령어는 스레드에 의해 실행되므로 각 스레드에는 별도의 PC 레지스터가 있습니다.
네이티브 메소드 스택:네이티브 메소드는 가상 머신의 런타임 데이터 영역에 액세스 할 수 있습니다.
네이티브 메소드 인터페이스:java 코드를 호출하거나 네이티브 응용 프로그램에서 호출 할 수 있습니다. 네이티브 응용 프로그램은 시스템의 하드웨어 및 OS 에 특정한 프로그램입니다.
가비지 컬렉션과 클래스의 인스턴스에 의해 명시적으로 생성 java 코드 및 사용 후 자동으로 파괴하여 가비지 컬렉션을 위한 메모리를 관리합니다.,
JVM Vs JRE Vs JDK
JRE:jre 는 java 가상 머신이 실행되는 환경입니다. JRE 에는 jvm(Java virtual Machine),클래스 라이브러리 및 컴파일러 및 디버거와 같은 개발 도구를 제외한 기타 파일이 포함되어 있습니다.
즉,JRE 에서 코드를 실행할 수는 있지만 jre 에서 코드를 개발하고 컴파일 할 수는 없습니다.
JVM:위에서 설명한 것처럼 JVM 은 jre 에서 제공하는 클래스,라이브러리 및 파일을 사용하여 프로그램을 실행합니다.,
JDK:JDK 는 상위의 JRE,그것은 모든 것을 포함하 JRE 가와 함께 개발 도구로는 컴파일러,디버거 등입니다.나는 이것을 할 수 없다.