JVM(자바 가상 머신, Java Virtual Machine)

자바로 작성된 프로그램 코드는 컴파일러를 통해 ‘바이트코드(bytecode)’형식으로 변환된다.
이때 생성되는 파일이 class파일인데, 이 파일은 명령어 등 다른 보조적 정보들을 담고 있다.
이 명령어들과 정보들을 해석하여 실행하는 것이 JVM이다.

즉, Java의 실행파일이 Class 파일!
이 Class파일을 실행시키는 것이 JVM!

이러한 특징때문에 자바로 작성된 프로그램은 어떤 운영체제에서도 거의 수정없이 사용할 수 있는 것이다!!

JVM은 4개의 구조적 영역으로 구분할 수 있다.

  • 클래스 영역
    사용자가 직접 작성하는 클래스 코드를 저장하는 곳으로, import문을 통해 필요로 하는 클래스들이 로드되며 멤버 메소드들은 메소드 영역에
    상수들은 상수 풀에 저장된다.
  • 자바 스택(Java Stack)
    프로그램을 수행할 경우에 여러 메소드들을 호출하고 또는 관련된 정보들을 주고 받기도 하는데, 이때 이러한 일 처리들을 기록하는 곳이 이 영역이다. 각 메소드에 관련된 정보들은 메소드가 호출될 때마다 ‘스택 프레임’이라는 또다른 영역에 생성되어 기록을 하게 된다.
    가장 최근에 호출한 메소드의 스택 프레임이 가장 위에 존재하게 되는데, 이를 ‘활성 스택 프레임’이라고 하며, 수행을 다하게 되면 해당 스택
    프레임은 소멸되고 아래에 있던 스택 프레임 위로 올라와 활성화가 된다.
    항상 현재 활성화되어 실행중인 곳을 가리키는 커서와 같은 것이 있는데 이는 ‘프로그램 카운터’이다.
  • 힙(Heap)
    new라는 예약어를 통해서 객체가 동적으로 공간을 할당받는 곳이며 가비지 컬렉션이 관리하는 영역이다.
    물론, 생성된 객체는 ‘클래스 영역’에 해당 클래스가 존재해야만 공간을 할당받을 수 있다.
  • 네이티브 메소드 스택
    자바에서는 C언어와 같은 다른 언어의 기능을 잠시 빌려서 사용할 때가 있는데, 이때 사용하는 것이 JNI(Java Native Interface) 기술이다. 여기서 사용되는 네이티브 메소드들이 바이트코드로 변환되면서 사용되고 기록하는 영역이 바로 네이티브 메소드 스택이다.

안녕하세요. 끄적이기를 좋아하는 개발자 이예빈입니다. 매일 일기를 쓰는 것 처럼 블로그를 쓰고 싶어요.
Leave a Reply

Your email address will not be published. Required fields are marked *