면접 질문지 소스

면접 질문 : Java 소스 파일이 바이트 코드를 거쳐, 기계어로 변환되는 과정을 설명

람대리 2024. 4. 19. 17:09
728x90

Java 언어로 프로그래밍된 파일을 Java 컴파일러가 가상 기계어 파일인 Java클래스 파일로 만듭니다.

다시말해 소스코드를 Java바이트코드로 변역합니다. 번역된 Java바이트 코드를 JVM이 읽고 실행하게 됩니다.

 

Java바이트코드란?

JVM이 이해할 수 있는 언어로, 변형된 Java 소스 코드를 의미한다. Java 컴파일러에 의해 변환되는 코드의 명령어 크기가 1Byte라 Java바이트코드라고 불린다. Java바이트코드 확장자는 class이며, JVM만 설치되어 있다면, 어떤 운영체제든지 실행 가능하다.

 

JVM이란?

Java Virtual Machine의 줄임말로 Java 클래스 파일을 로드하고, 바이트 코드를 해석하며, 자원을 관리하고 할당하며 정보를 처리한다. 플랫폼에 독립적이다. Java바이트코드를 받은 JVM은 실행 중인 O/S에 맞는 Binary 코드를 생성하여 어느 O/S이든 JVM이 있다면 실행가능하므로 플랫폼에 독립적이다. 

 

JVM 구성요소

-Java Compiler

 Java 소스 파일을 JVM이 해석할 수 있는 Java Byte 코드로 바꿔준다.

 

-Class Loader

 JVM내로, Class 파일들을 Load한다. Loading된 클래스들을 Runtime Data Area에 배치한다.

 

-Excution Engine

로딩된 Bytecode를 해석한다. 이 과정에서 Bytecode가 Binarycode로 변경된다.

 

-Runtime Data Area

JVM이 프로세스를 수행하기 위해 O/S로부터 할당받은 메모리이다. 저장목적에 따라 5개로 나눌 수 있다

 

   1.Method Area

    모든 Thread에게 공유된다. 클래스 정보, 변수 정보, Method 정보, static 정보, 상수 정보 등이 저장되는 영역

   2.Heap Area

     모든 Thread에게 공유된다. newe 명령으로 생성된 인스턴스가 저장되는 구역, 공간이 부족해지면 Garbage Collection       이 실행된다

   3.Stack Area

     각 Thread마다 실행된다. Method안에 사용되는 값(매개변수, 리턴값, 지역변수)등이 저장되는 구역

   4.PC register

      각 Thread마다 실행된다. 현재 수행중인 JVM 명령의 주소값 저장된다. CPU register와 비슷한 용도이다.

   5.Native Method Stack

       각 Thread마다 하나씩 생성된다. 다른 언어의 메서드 호출을 위해 할당되는 구역, 언어에 맞게 Stack이 형성되는 구