Java

Java의 특징과 동작원리

shininghyunho 2024. 1. 17. 15:00

Java는 대표적인 객체지향 언어다.

그렇다면 객체지향이란 무엇인가?

해당 포스팅에서 확인 : 객체지향이란?

 

어떻게 실행하는가?

Java의 컴파일은 C, C++과 큰 차이가 없다.

// 컴파일 과정
자바 소스 코드(.java) -> 자바 컴파일러 -> 자바 바이트 코드(.class)

 

하지만 실행과정이 다르다.

C,C++은 바이트 코드를 운영체제가 직접 실행시킨다.

그래서 운영체제가 다른 기기에서 같은 코드를 실행시키려면

해당 운영체제에 맞게 재컴파일이 필요하다. (운영체제 종속적)

 

반면 Java는 한번 컴파일되면 동일한 코드를 어느 운영체제에서나 실행시킬 수 있다. (운영체제 독립적)

(WORA : Write Once, Run Anywhere)

이는 Java의 바이트 코드를 운영체제가 직접 실행하는것이 아닌,

JVM이 실행시켜주기 때문이다.

(운영체제가 아닌 JVM에 종속적, 그래서 WIN JVM, Linux JVM, MAC JVM이 다 따로 존재한다.)

그리고 JVM이라는 가상머신을 운영체제가 실행시켜준다.

JVM에서는 어떻게 실행되는거지?

큰 시나리오는 다음과 같다.

  1. 컴파일된 바이트코드를 JVM의 클래스 로더(Class Loader)가 전달받는다.
  2. 클래스 로더는 JVM의 메모리 영역(Runtime Data Area)에 바이트코드를 적재한다.
    단 한번에 모든 메모리를 적재하는것이 아닌,
    그때그때 필요한 클래스들을 로딩 및 링킹한다.
  3. JVM의 실행머신(Execution Engine)이 메모리 영역을 참조하여 실행한다.

즉 Byte Code를 Class Loader가 Runtime Data Area에 적재하고,

이를 Execution Engine이 실행한다는 말이다.

 

JVM의 메모리 영역

구체적으로 설명하기 앞서

JVM의 메모리 영역을 먼저 설명한다.

 

메모리 영역은 모든 Tread들이 공통적으로 사용하는 Heap, Method Area와

Thread 별로 독자적으로 갖는 PC Register, Stack, Native Method Stack이 있다.

  • Heap : 인스턴스 또는 객체가 저장되는 공간. 메모리를 동적으로 할당해 GC의 처리 대상 공간.
  • Method Area : 클래스와 메소드에 대한 정보가 meta-data가 저장되는 공간.
    각 클래스와 인터페이스에 대한 런타임 상수 풀, 필드와 메서드 정보, static 변수, 메서드의 바이트 코드들이 보관됨.
    • Runtime Constant Pool : 클래스, 인터페이스의 상수 풀을 저장.
      Java 7 이전까지는 String Constant Pool, Runtime Constant Pool 이 하나의 Constatnt Pool로 Heap 에 속하는 PermGen 영역에 해당되었음.
      Java 8 이후부터는 String Constant Pool, Runtime Constant Pool 이 Native Memory에 Metaspace 영역으로 분리되었음. 제한되어있던 메모리 영역을 OS가 동적으로 더 할당이 가능하게되어 Java 7이전에 발생하던 OOM이 줄어듦.
  • PC Register : OS에 존재하는 PC Register와는 별개의 레지스터. 다음 수행할 명령이 적혀있음.
  • Stack : 메소드를 호출할때마다 Frame이라는 자료구조로 스택이 쌓이게됨.
    프레임에는 메소드 호출시 필요한 매개변수, 변수, 객체 주소값 등이 적혀있음.
  • Native Method Stack : JNI를 사용하기위한 스택.
    하드웨어 관리와 성능상 이점을 위해 C/C++을 사용할때가 생김.
    그래서 Java와 다른 언어의 변경을 해주는게 JNI이다.

참고

[Java] 컴파일 과정 | 👨🏻‍💻 Tech Interview (gyoogle.dev)

[JAVA] JVM 동작원리 및 기본개념 (tistory.com)

Java 런타임 데이터 영역 :: 스터디룸 (tistory.com)