[JAVA] 프로그램 실행 과정

토닉·2021년 8월 2일
0

Java

목록 보기
1/13
post-thumbnail

⭐️ 자바 프로그램 실행 과정


1. Java 언어로 프로그래밍된 파일을 Java 컴파일러(javac)가 가상 기계어 파일인 Java클래스 파일을 만든다.(소스코드 -> Java 바이트 코드)
2. Java 바이트 코드를 JVM이 읽고 실행하게 된다.

java 바이트 코드

JVM이 이해할 수 있는 언어로 변환된 자바 소스 코드를 의미합니다. 자바 컴파일러에 의해 변환되는 코드의 명령어 크기가 1바이트라서 자바 바이트 코드라고 불립니다.(자바 바이트 코드의 확장자 : .class) 자바 가상 머신만 설치되어 있으면, 어떤 운영체제에서라도 실행될 수 있다.

⭐️ JVM


Java Virtual Machine의 줄임말로 OS마다 따로 코드르 작성하지 않고 Java가 플랫폼에 독립적일 수 있게 만들어줍니다.

  • JVM은 Java 클래스 파일을 로드하고 바이트 코드를 해석하며, 메모리 등의 자원을 할당하고 관리하며 정보를 처리하는 작업을 하는 프로그램

  • Java Compiler(.java -> .class)
    Java Source 파일(.java)을 JVM이 해석할 수 있는 Java Byte Code(.class)로 변경한다.
  • Class Loader
    .class 파일들을 JVM내로 Load한다. Loading 된 클래스들은 Runtime Data Area에 배치된다.
  • Execution Engine
    Loading 된 클래스의 Bytecode를 해석한다. 이 과정에서 ByteCode가 BinaryCode로 변경된다.

ByteCode와 BinaryCode의 차이점

바이너리 코드: 컴퓨터가 인식할 수 있는 0과 1로 구성된 이진코드
바이트 코드: 가상 머신이 이해할 수 있는 0과 1로 구성된 이진코드

  • 바이트 코드는 다시 실시간 번역기 또는 저스트 인 타임(JIT) 컴파일러에 의해 바이너리 코드로 변환된다.

⭐️ 메모리 구조(Runtime Data Area)

JVM이 프로세스로써 수행되기 위해 OS로 부터 할당받는 메모리 영역
WAS의 성능에 문제가 발생했을 때, 대부분 이 영역들이 원인이 된다.
저장 목적에 따라 다음과 같이 5개로 나눌 수 있다.

  • Method Area
    모든 Thread에게 공유된다.
    클래스, 변수, Method, static변수, 상수 등이 저장되는 영역
  • Heap Area
    모든 Thread에게 공유된다.
    new 명령어로 생성된 인스턴스와 객체가 저장되는 구역, 공간이 부족해지면 GC(Garbage Collection)이 실행된다.
  • Stack Area
    각 Thread마다 하나씩 생성된다.
    Method안에서 사용되는 값들(매개변수, 지역변수, 리턴 값 등)이 저장되는 구역, 메서드가 호출될 때 LIFO로 하나씩 생성되고, 메서드 실행이 완료되면 LIFO로 하나씩 지워진다.
  • PC Register
    각 Thread마다 하나씩 생성된다.
    CPU의 Register와 역할이 비슷하다. 현재 수행 중인 JVM명령의 주소 값이 저장된다.
  • Native Method Stack
    각 Thread마다 하나씩 생성된다.
    다른 언어의 메서드 호출을 위해 할당되는 구역 언어에 맞게 Stack이 형성되는 구역이다. JNI(Java Native Interface)라는 표준 규약을 제공한다.

참고자료

profile
우아한테크코스 4기 교육생

0개의 댓글

Powered by GraphCDN, the GraphQL CDN