본문 바로가기

개발일지/Java + Spring

JVM이란? JVM의 구성요소

 

 

자바 소스코드로 작성한 것을 기계가 읽을 수 있도록 컴파일러(javac)가 바이트코드로 변환한다. 이 때 확장자가 .class이다. 바이트코드 라는 것은 JVM(가상머신)이 이해할 수 있는 언어로 어떠한 플랫폼에서도 JVM 위에서 실행할 수 있다. (Window, Linux, MAC 어디서든 사용 가능)

처음 JDK를 설치하고 환경 변수를 설정 했던 게 JVM 위에서 실행시키기 위한 과정이었다. 이클립스는 연결만 시켜줬던 것이고 실제 실행 시켜 주는 것은 JVM이라는 것을 알아두자!

-콘솔창(cmd)에서 검색을 하고 소스 파일로 이동(cd)해서 파일 확인도 가능하다(수업)

 

다시 그림을 보면서 위에 했던 말을 반복하자면.. 자바 소스를 만들면 자바 컴파일러(javac)가 클래스 파일로 바꿔준다. 이 클래스 파일을 컴파일 시키면 JVM으로 간다. 그 안에서는 무슨 일이 벌어지고 있을까? 클래스로더가 그것을 가지고 와서 연결을 시킨다. 그것을 익스큐션 엔진이 실행을 시켜준다. 가비지 컬렉터는 말 그대로 메모리 관리를 자동으로 해주는 부분이다. 런타임 데이터 지역은 기억저장소라고 할 수 있다. 

 

1 Method Area

JVM에서 읽은 클래스와 인터페이스에 대한 런타임 상수, 메소드와 필드, Static 변수, 메서드 바이트 코드 등을 보관한다.

 

2 Heap Area

Scanner와 같이 new 연산자를 이용해서 만든 모든 객체를 Heap에 저장한다. 

실질적인 값이 들어가는 곳

3 Stack Area

갑자기 일어난 임시 데이터, 메서드 호출시 생성되는 스레드 수행정보를 기록하는 Frame 저장, 메서드 정보, 지역 변수, 매개 변수 등 이곳에 들어간다.


4 PC Register

프로그램 카운터

지금 실행중인 JVM의 주소를 가지고 있다.  


5 Native Method Stack

자바 바이트코드가 아닌 C/C++ 등 다른 언어로 작성된 메서드를 저장하고 있다. 

 

Method와 Runtime Constant Pool, Heap 영역은 모든 스레드에서 공유할 수 있다.