[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개의 댓글