Java 아키텍처 및 구성 요소 설명 [2022]
게시 됨: 2021-01-04Java 프로그래머가 되기 전에 이 언어의 모든 측면을 이해해야 합니다. Java의 가장 중요한 측면 중 하나는 Java 아키텍처입니다. 이와 관련하여 또 다른 기술 주제는 JVM의 구성 요소를 아는 것입니다. 따라서 이 글에서 이 두 가지 중요한 주제를 모두 다룰 것입니다.
이 기사는 귀하가 Java의 기본 사항을 전반적으로 이해하고 있다고 가정합니다. Java의 기본 사항에 익숙하지 않더라도 아래 의견 섹션에서 질문할 수 있습니다. 시작하자:
목차
자바 아키텍처 설명
Java에는 컴파일 및 해석이라는 두 가지 프로세스가 있습니다. Java 컴파일러는 Java에 있는 코드를 바이트 코드로 변환합니다. JVM(Java Virtual Machine) 은 바이트 코드를 기계가 직접 실행하는 기계어로 변환합니다.
이 프로세스를 다음 단계로 설명할 수 있습니다.
- 소스 코드는 Java 컴파일러로 이동합니다.
- Java 컴파일러는 이를 바이트 코드로 변환합니다.
- 바이트 코드는 Java 가상 머신으로 이동합니다.
- 마지막으로 OS(운영 체제)로 이동합니다.
이제 Java 아키텍처가 작동하는 방식에 약간 익숙해졌으므로 다양한 구성 요소를 살펴볼 수 있습니다.
JVM(자바 가상 머신)
Java 제작자는 WORA(Write Once Run Anywhere)를 원했습니다. 즉, 모든 플랫폼에서 애플리케이션을 실행할 수 있지만 Java에 이러한 품질을 제공하는 것은 JVM입니다. JVM은 Java 코드를 실행할 수 있는 환경을 제공합니다. 그것은 바이트 코드를 해석하고 기계가 Java 프로그램을 실행할 수 있도록 기계 코드로 변환합니다.

JVM 로드는 코드를 확인하고 실행합니다. 또한 컴퓨터에서 실행할 수 있도록 코드에 런타임 환경을 제공합니다.
JRE(자바 런타임 환경)
JRE는 Java 프로그램을 실행할 수 있는 런타임 환경을 구축합니다. Java 코드를 가져와 필요한 라이브러리와 결합합니다. JRE는 실행을 위해 JVM도 시작합니다. Java Runtime Environment에는 필요한 소프트웨어와 라이브러리가 있으므로 프로그램을 실행할 수 있습니다.
JDK(자바 개발 키트)
JDK를 사용하여 Java 앱 및 프로그램을 개발할 수 있습니다. 그것은 소프트웨어 개발 환경이며 JRE, 컴파일러, 인터프리터, 문서 생성기 및 기타와 함께 아카이버를 포함한 여러 개발 도구를 포함합니다.
JVM의 구성 요소
이제 Java 아키텍처에 익숙해졌으므로 더 잘 이해할 수 있도록 JVM의 구성 요소를 살펴보겠습니다. JVM은 Java에서 가장 중요한 작업 중 하나를 수행하므로 이를 위한 많은 부분이 있습니다. 각 요소에 대해 자세히 설명합니다.
클래스로더 서브시스템
ClassLoader는 클래스 파일을 로드하는 Java Virtual Machine의 하위 시스템입니다. 다른 작업을 수행할 수 있도록 프로그램을 로드하는 아키텍처의 첫 번째 구성 요소입니다. 또한 클래스 파일을 연결하고 초기화합니다. 작업을 다음 세 부분으로 나눌 수 있습니다.
로딩 중
이 구성 요소는 클래스를 로드합니다. 부트스트랩 클래스 경로에 속하는 클래스를 로드하기 위한 BootStrap ClassLoader가 있습니다. Extension ClassLoader는 ext 폴더 내부에 있는 클래스를 로드하고, Application ClassLoader는 언급된 환경 변수 및 유사한 파일 경로를 로드합니다.

연결
여기에서 하위 시스템에는 바이트 코드가 올바른지 확인하는 검증기가 있습니다. 바이트코드가 올바르지 않으면 확인 오류가 발생합니다. 연결 섹션은 모든 정적 변수 메모리를 할당하고 기본값을 할당합니다. 또한 메모리의 상징적 참조를 원래의 것으로 대체합니다.
초기화
ClassLoading의 이 섹션에서 시스템은 정적 변수를 원래 값에 할당하고 정적 블록을 실행합니다.
런타임 데이터 영역
JVM의 이 섹션에는 다음 구성 요소가 있습니다.
방법 영역
메서드 영역은 모든 클래스 수준 데이터를 저장합니다. 모든 JVM에는 하나의 메소드 영역만 있습니다.
힙 영역
힙 영역은 모든 개체와 해당 인스턴스 배열 및 변수를 저장합니다. 메소드 영역과 마찬가지로 JVM에는 하나의 힙 영역만 있습니다.
스택 영역
이 섹션에서는 모든 위협에 대해 고유한 런타임 스택을 만들고 스택 메모리(스택 프레임이라고도 함)의 모든 메서드 호출에 대한 항목을 만듭니다. 메서드와 관련된 Local Variable Array, 중간 작업을 위한 작업 공간 역할을 하는 피연산자 스택, 메서드와 관련된 모든 기호가 저장된 상태로 유지되는 프레임 데이터가 있습니다. 프레임 데이터는 예외가 없는 한 catch 블록 정보를 유지합니다.
PC 레지스터
모든 스레드에는 실행 중인 명령어의 주소를 보유하는 별도의 PC 레지스터가 있습니다. 명령어가 실행을 완료하면 PC 레지스터는 다음 명령어로 자신을 업데이트합니다.
네이티브 메소드 스택
이름에서 알 수 있듯이 이 섹션에는 기본 메서드에 대한 정보가 있습니다. 모든 위협에 대해 고유한 기본 메서드 스택을 생성합니다.
런타임 데이터 영역(메서드 영역 및 힙 영역)의 처음 두 구성 요소는 공유 리소스이지만 스택 영역은 그렇지 않다는 점에 유의해야 합니다.
실행 엔진
실행 엔진은 바이트 코드를 실행합니다. 한 조각씩 읽고 실행합니다. 또한 다음과 같은 다양한 구성 요소가 있습니다.
통역사
이 구성 요소는 바이트 코드를 빠르게 해석하지만 실행 속도가 약간 느립니다. 시스템이 하나의 메서드를 여러 번 호출하고 매번 새로운 해석이 필요하다는 치명적인 단점이 있습니다. 인터프리터의 이러한 단점은 프로세스의 효율성을 크게 손상시킵니다.
JIT 컴파일러
JIT 컴파일러에는 인터프리터의 단점이 없습니다. 따라서 Execution Engine은 반복되는 코드를 찾으면 인터프리터 대신 JIT 컴파일러를 사용합니다. JIT 컴파일러는 바이트코드를 컴파일한 후 네이티브 코드로 변환합니다. 시스템은 네이티브 코드를 직접 사용합니다.
JIT Compiler에는 중간 코드를 생성하기 위한 중간 코드 생성기와 이를 최적화하기 위한 코드 최적화기가 있습니다. 또한 기본 do를 생성하는 대상 코드 생성기와 핫스팟을 찾는 프로필이 있습니다.
쓰레기 수집가
실행 엔진의 마지막 구성 요소는 참조되지 않은 개체를 수집하고 제거하는 가비지 수집기입니다. system.gc()를 호출하여 트리거할 수 있지만 실행이 보장되지는 않습니다.

이러한 구성 요소 외에도 JVM에는 JNI(Java Native Interface) 및 기본 메서드 라이브러리도 있습니다. 전자는 후자와 상호 작용하고 실행에 필요한 기본 라이브러리를 제공합니다.
세계 최고의 대학에서 소프트웨어 개발 과정 을 받으십시오 . 이그 제 큐 티브 PG 프로그램, 고급 인증 프로그램 또는 석사 프로그램을 획득하여 경력을 빠르게 추적하십시오.
마지막 생각들
우리는 이 기사를 간결하고 유용하게 유지하려고 노력했으며 이 정보가 유익하다고 확신합니다. JVM의 구성 요소나 Java 아키텍처에 대해 질문이 있는 경우 의견을 통해 문의하여 질문할 수 있습니다.
블로그에서 Java 및 해당 응용 프로그램에 대해 자세히 알아볼 수 있습니다. 우리는 이 강력한 프로그래밍 언어의 다양한 측면을 다루는 수많은 유용한 가이드와 기사를 보유하고 있습니다.
Java, OOP 및 전체 스택 소프트웨어 개발에 대해 자세히 알아보려면 작업 전문가를 위해 설계되었으며 500시간 이상의 엄격한 교육을 제공하는 upGrad & IIIT-B의 전체 스택 소프트웨어 개발 이그 제 큐 티브 PG 프로그램을 확인하십시오. 9개 이상의 프로젝트 및 과제, IIIT-B 동문 자격, 실질적인 실습 캡스톤 프로젝트 및 최고의 기업과의 취업 지원.
