Java는 플랫폼 독립성과 효율적인 실행으로 널리 알려져 있습니다. 이 기사에서는 인간이 읽을 수있는 코드 작성부터 다른 플랫폼에서 실행에 이르기까지 전체 Java 실행 프로세스를 안내합니다. JDK, JVM 및 JRE의 역할과 Java 프로그램을 컴파일하고 실행하는 데 관련된 단계를 다룰 것입니다.
1. 키 Java 구성 요소
실행 프로세스로 뛰어 들기 전에 Java의 세 가지 핵심 구성 요소를 이해하는 것이 필수적입니다.
JDK (Java Development Kit)
JDK는 본격적인 소프트웨어 개발 키트로 Java 프로그램을 작성, 컴파일 및 실행할 수 있습니다.
는 JVM (Java Virtual Machine) 및 JRE (Java Runtime Environment)와 Compiler (Javac)와 같은 개발을위한 필수 도구를 포함합니다.
JDK는 개발자가 코드를 작성하고 컴파일하는 데 사용되며 나중에 JVM에서 실행됩니다.
-
JVM (Java Virtual Machine)
JVM은 Java Bytecode를 실행하는 엔진입니다. 그것은 기본 하드웨어 및 운영 체제를 추상화하여 Java 플랫폼 독립적 인 것으로 만듭니다.
Java 프로그램은 JVM이 해석하고 실행하는 바이트 코드로 컴파일되어 동일한 Java 프로그램이 JVM을 사용하여 모든 기계에서 실행할 수 있습니다.
JRE (Java 런타임 환경) -
-
JRE는 JVM을 포함하여 Java 프로그램을 운영하는 데 필요한 라이브러리와 리소스를 제공합니다.
는 Java 프로그램에 의존 할 수있는 String 및 Array와 같은 핵심 클래스가 포함되어 있습니다.
JRE에는 컴파일러와 같은 개발 도구가 포함되어 있지 않으므로 Java 응용 프로그램을 실행하는 데 적합하지만 개발에는 적합하지 않습니다.
-
2. Java 실행 프로세스
-
1 단계 : 코드를 작성하십시오
는 일반적으로 .java 파일에 저장되는 Java 코드를 작성하여 시작합니다. 이 코드는 사람이 읽을 수 있으며 Java 구문을 따릅니다
2 단계 : 코드를 컴파일합니다 -
-
코드가 준비되면 JAVAC 컴파일러는 사람이 읽을 수있는 .java 코드를 바이트 코드 (.class 파일에 저장)로 변환하는 데 사용됩니다.
바이트 코드는 이진 형식으로 모든 운영 체제에서 동일합니다. 이 바이트 코드는 JVM이있는 모든 플랫폼에서 실행하여 플랫폼 독립성을 보장 할 수 있습니다.
3 단계 : jvm - 로 바이트 코드를 실행하십시오
3.1 바이트 코드로드 -
Java 프로그램을 실행하려고 할 때 JVM은 바이트 코드 (즉, .class 파일)를 메모리에로드합니다.
클래스 로더는 사용자가 제공 한 클래스 이름을 기반으로 클래스를 찾고로드 할 책임이 있습니다.
클래스를 찾을 수 없으면 ClassNotFoundException이 발생합니다.
클래스가 발견되면 JVM이 메모리에로드합니다. 클래스의 정적 메소드, 변수 및 데이터는 JVM 메모리의 특별한 부분 인 메소드 영역에 저장됩니다.
3.2 바이트 코드 실행
클래스가로드되면 JVM은 실행을 시작하기 위해 Main () 메소드 (프로그램의 진입 점)를 찾습니다.
main () 메소드가 발견되면 실행 프로세스가 시작됩니다.
-
-
3. 실행 메커니즘
JVM이 Bytecode를 실행하는 데 사용하는 두 가지 주요 접근법이 있습니다 : 통역사 및 JIT (Just-In-Time) 컴파일러.
-
통역사 (느린) -
-
통역사 접근법에서 JVM은 바이트 코드를 한 줄씩 읽고 실행합니다.
메소드가 호출 될 때마다 JVM은 바이트 코드를 다시 발췌하며 동일한 메소드가 여러 번 다시 실행 될 수 있으므로 느리게 될 수 있습니다.
- JIT (정시) 컴파일러 (더 빠른)
-
JIT 컴파일러는 바이트 코드를 기본 기계 코드로 컴파일합니다.이 기계 코드는 프로그램이 실행중인 플랫폼 및 기계에만 해당됩니다.
핫스팟이라는 기술을 사용하여 성능을 최적화합니다.
핫스팟은 자주 코드의 부분 (예 : 메소드)에 사용됩니다. 이것들은 JIT 컴파일러에 의해 식별되며 매번 해석하는 대신 JIT는 그것들을 기본 기계 코드로 컴파일합니다.
컴파일 된 기계 코드가 캐시되므로 동일한 메소드가 다시 필요한 경우 JVM은 캐시 된 기계 코드를 사용할 수 있으므로 더 빠른 실행을 초래할 수 있습니다.
핫 스팟
핫스팟 기술은 JVM이 전체 클래스가 아니라 자주 사용되는 방법 만 컴파일하도록합니다. 이로 인해 장기 실행 응용 프로그램의 성능이 크게 향상됩니다
JVM은 매번 바이트 코드를 해석하는 대신 이러한 핫스팟을 실행하기 위해 기계 코드를 사용합니다.
-
4. JVM 메모리 영역
JVM은 실행 중 프로그램의 다른 부분에 대한 메모리를 할당합니다. 일부 주요 영역은 다음과 같습니다
-
메소드 영역 : 클래스, 메소드 및 정적 변수에 대한 정보를 보유합니다.
<:> 힙 영역 :
런타임 중에 생성 된 개체를 저장합니다
-
<:> 스택 영역 : 는 로컬 변수 및 메소드 호출을 저장합니다
프로그램 카운터 (PC) : 실행중인 현재 명령을 가리키는 레지스터.
-
5. 실행 흐름 요약
-
코드 쓰기 : java 코드는 .java 파일로 작성됩니다
컴파일 : 코드는 Javac 컴파일러가 바이트 코드 (.class files)로 컴파일됩니다.
bytecode로드 : 클래스 로더를 사용하여 JVM은 바이트 코드를 메모리에로드합니다.
<: :> 진입 점 찾기 :
jvm은 실행을 시작하기 위해 main () 메소드를 찾습니다.
통역사 또는 JIT를 통한 실행 :
통역사 : 는 바이트 코드를 라인별로 실행합니다 (느린)
-
JIT 컴파일러 : 더 빠른 실행을 위해 핫스팟을 기본 기계 코드로 컴파일합니다 (빠른).
-
바이트 코드, JVM 및 JIT 컴파일러의 조합은 Java가 플랫폼 독립적이고 효율적임을 보장합니다. Execution Flow는 해석자를 Simplicity를 위해 사용하고 성능 최적화를 위해 JIT 컴파일러를 사용하여 Java 프로그램이 다양한 플랫폼에서 효율적으로 실행될 수 있습니다.
요약 :
JVM은 Java 코드가 휴대 가능하고 효율적인지 확인하는 데 중요한 역할을합니다. 먼저 바이트 코드를로드 한 다음 통역사 (느린) 또는 JIT 컴파일러 (더 빠른)를 통해 실행합니다.
JIT 및 핫스팟을 사용하여 JVM은 성능을 최적화하면서 다른 플랫폼에서 동일한 바이트 코드를 실행할 수있는 기능을 유지합니다.
-
위 내용은 Java 실행 프로세스 이해 : 코드에서 실행까지의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!