(Java) JVM 구조와 이해

2022. 7. 16. 00:30Java

반응형

오늘은 JVM의 구조에 대해서 적어보려 한다.

 

이전에 간략하게나마 JVM 구조에 대해 적은 것이 있으니 참고하는 것도 좋을거 같다.

 

 

 

JAVA - JVM에 대해 알아보자 -1

Java에 대해 알고 있는가?  자바는 썬 마이크로시스템즈의 제임스 고슬링과 다른 연구원들이 개발한 객체 지향적 프로그래밍 언어이다.(순수 객체 지향 언어X) 91년 그린 프로젝트라는 이름으

mirrorofcode.tistory.com

 

오늘은 이런 원론적인 얘기를 하려는 것은 아니고 실제로 JVM이 어떻게 구성되어 있는지를 알아보려고한다.

 

 

윗 글을 읽기 귀찮은 분들 위해 간략하게 JVM이 무엇인지에 대해 설명하면

 

운영체제 위에서 동작하는 자바를 위한 운영체제라고 생각하면 편할거 같다.

 

 

일반적으로 계층이 Program - OS - HW 이렇게 구성된다면

JVM은 Program - JVM - OS - HW 이렇게 구성된다.

 

 

그럼 JVM은 어떻게 생겼을까? 그 구조에 대해 알아보자.

 

🧐JVM Structure


sorce from Java tutorial

이것이 JVM이다.

 

 

여기서 가장 중요한 것은 Runtime Data Area다.

 

Runtime Data Area는 다음과 같은 것들로 이루어져 있다.

 

  • Method Area
  • Heap
  • Stack
  • PC Register
  • Native Method Stack

 

Method Area는 클래스별 전역변수, 정적변수, 메서드 정보가 저장 된다.

 

Heap에는 런타임 중에 생성되는 객체를 동적 할당 되는 곳이다.

 

Stack에는 지역변수, 파라미터 변수, 리턴 정보 등이 저장되는 곳이다.

 

PC Register에는 현재 JVM이 수행중인 명령어가 저장된다.

 

Native method Stack은 자바 외의 언어로 작성되어 있는 함수, 코드가 저장되어 있다.

 

 

여기서 중요한 것이 하나 있다.

 

자바는 다중 스레드, 즉 멀티스레딩을 이용한다.

 

멀티 스레딩을 이용하기 때문에 각각의 스레드마다 공유하는 것이 있다.

 

운영체제의 일반적인 메모리 구조에서 공유하는 것이 있다.

 

 

운영체제는 일반적으로 코드영역, 데이터 영역, 힙 영역을 공유한다.

 

 

하지만 JVM은 좀 다르다.

 

JVM은 Method Area와 Heap을 공유하고, 나머지는 각각의 스레드에 할당된다.

 

이것은 자바에서 중요한 의미를 가진다.

 

바로 GC(Garbage Collector)때문이다.

 

GC는 Heap을 정리한다.

 

GC의 구조는 버전별로 달랐지만, 현재는 자바 8버전 이후부터는 G1GC를 사용한다.

 

GC에 대해서는 다음에 또 적으면 좋을거 같다.

 

 

 

Github

 

mikekang47 - Overview

BE Developer TDD lover. mikekang47 has 51 repositories available. Follow their code on GitHub.

github.com

 

반응형