Java 특징

자바는 OS에 대해 독립적인 특징을 가지고 있습니다.

그 이유는 JVM이라는 가상 머신 위에서 자바가 동작하기 때문입니다.

 

자바는 객체지향 프로그래밍 언어로, 캡슐화, 상속, 다형성 등의 객체지향 개념을 지원합니다.

이 덕분에 코드의 재사용이 높아지고, 유지보수가 쉽습니다.

 

JVM

JVM의 역할은 자바 애플리케이션을 클래스 로더를 통해 읽어 들여 자바 API와 함께 실행하는 것입니다.

Java와 OS 사이의 중개자로써 java가 독립적으로 작동이 가능하게 합니다.

또한 가장 중요한 메모리 관리, 가비지 컬렉션(GC)를 수행합니다.

 

JVM 특징

  • 컴파일된 바이트 코드를 기계가 이해할 수 있는 기계어로 변환
  • 스택 기반의 가상 머신
  • 메모리 관리와 GC를 수행

JVM 구조

 

JVM 구조는 크게 Garbage Collector(GC), Execution Engine, Class Loader, Runtime Data Area로 나누어져 있습니다.

 

  • Garbage Collector(GC): 메모리 관리 기법 중 하나로, Heap 영역에 배치된 객체들을 관리하는 모듈입니다.
  • Execution Engine: class파일과 같은 ByteCode를 실행 가능하도록 해석합니다.
  • Class Loader: 클래스 파일을 Runtime Data Area의 메서드 영역으로 불러오는 역할을 합니다.
  • Runtime Data Area: 프로그램을 수행하기 위해 OS로부터 할당받은 메모리 영역입니다.

Runtime Data Area

 

  • Native Method Stacks: 메서드의 정보가 기계어(바이트 코드)로 저장되는 공간
  • JVM stack: 메서드가 실행되는 공간(지역변수, 매개변수들이 만들어지는 공간)
  • PC Register: CPU에 직접 접근하지 않고 스택에서 주소 가져와 저장되는 공간
  • Heap: 객체가 생성되는 메모리 공간, GC에 의해 메모리 관리가 되는 영역
  • Method Area: JVM이 읽어 들인 각각의 클래스와 인터페이스에 대한 런타임 상수 풀, 필드와 메서드에 대한 정보, static 변수, 메서드의 바이트 코드들이 할당되는 메모리 공간
  • Runtime Constant Pool: 리터럴(Literal) 풀이라고도 하며, 상수 값이 할당되는 메모리 공간, 문자열 중 문자열 상수가 할당되는 메모리 공간

메인 클래스가 동작되는 방식

JVM이 실행할 클래스를 탐색

static 키워드가 붙어있는 멤버들을 정해진 메모리(static-zone) 위치에 한 번 자동으로 로딩

    - static 멤버들은 클래스를 사용하는 시점에서 딱 한 번 메모리에 로딩된다는 점이 중요

JVM이 static-zone에서 main() 메서드를 호출

호출된 메서드를 Call Stack Frame Area(Stack Area)에 기계어 코드를 넣은 뒤 동작을 시작

    - stack에 아무 것도 없다면 프로그램 종료

'채워가는 지식 > Java' 카테고리의 다른 글

Arrays.asList()와 List.of() 차이  (0) 2024.02.20
멀티 모듈  (1) 2023.12.05
객체 지향 설계 - 프로그래밍 관점  (0) 2023.11.30
객체 지향 설계 - 이론  (0) 2023.11.30

+ Recent posts