반응형


jvm에 대한 이미지 검색결과




자바 가상 머신인 JVM에 대해 간단히 알아보겠습니다~




jvm에 대한 이미지 검색결과

(사진 출처 : https://www.guru99.com/java-virtual-machine-jvm.html)




자바의 큰 장점은 OS의 상관없이 플랫폼 위에서 작동을 한다는 것인데요.

OS위에 JVM이 있기 때문에 가능합니다.


이것은 JVM의 구조 입니다.

먼저 JVM을 사용하기 위해서는 JDK를 설치를 해야 하는데요.

오라클 홈페이지에서 다운을 받을 수 있습니다.


JDK는 JRE를 포함하여 자바개발도구와 자바컴파일러를 제공합니다.

JVM은 JDK에 포함된 JRE의 JVM과 Java API를 제공합니다.





1. 클래스 로더(Class Loader)

자바 프로그램의 확장자는 '.java'이며 이 파일이 자바 컴파일러에서 컴파일 과정을 거치면서 '.class' 파일이 생성됩니다.

즉 자바 소스가 JVM에 적재가 가능하도록 바이트 코드로 변환이 됩니다.

그러면 1번인 Class Loader가 클래스 로딩을 통해 Class 파일들을 JVM에 적재해 JVM은 클래스 파일을 읽고, 메모리를 할당해줍니다.



2. 메소드 영역(Method Area)

적재된 클래스 파일들은 2번 Method Area(메소드 영역)에 저장됩니다. 클래스 파일은 메소드와 클래스 변수로 구성되어 있고 메타정보라고 합니다.


JVM에서 클래스를 실행하면 메소드 영역에서 클래스 정보를 복사하고 힙 영역에서 메모리를 할당하여 실행합니다.

메소드 영역은 JVM 메모리 영역 중 가장 먼저 데이터가 저장 되는 곳!


3. 힙 영역(Heap Area)

메소드 영역에서 클래스 정보를 복사하면 이제 2번 Heap Area(힙 영역)에 메모리를 할당한다고 했습니다.

JVM의 영역 중에서 가장 중요한 역할을 담당 하는데요!

그 유명한 GC(Garbage Collection, 가비지 컬렉션)을 수행하는 영역입니다.


실행된 클래스를 객체라고 했을 때 이 객체가 힙 영역에 저장이 됩니다.

즉 힙 영역은 동적 데이터가 생성되고 소멸되는 영역이라 할 수 있겠습니다.


여기서 좀 더 깊게 들어가면 힙 영역에는 크게 3가지 영역이 더 있는데요.

Young Generation, Old Area, Permanent Area 가 있습니다. 그냥 참고 하시면 좋을 것 같습니다.

Young 영역은 다시 Eden, Servivor1, Servivor2 로 나눌 수 있어요.


Young 영역은 프로그램 내부에 새롭게 생긴 데이터가 저장되는 부분이고, 이 데이터가 계속해서 사용되면

Old 영역으로 가게됩니다. 즉 데이터의 목적과 수명에 따라 저장영역이 다릅니다.

Permanent 영역은 클래스의 정보를 저장하는 영역입니다.


3-1 가비지 컬렉터 (Garbage Collector)

가비지 컬렉터는 힙 영역에서 참조되지 않은 데이터를 삭제하는 역할을 합니다.

그로 인해 개발자들의 불편을 많이 덜어줍니다.

가비지 컬렉터가 데이터를 삭제하는 알고리즘은 힙의 영역에 따라 다른데요.

Young 영역은 새로운 데이터가 생성, 소멸되는 것이니 삭제의 속도가 주기가 빠른 편입니다.

그에 반에 Old 영역은 계속하여 사용하는 데이터다 보니 삭제의 속도 및 주기가 Young영역보다 비교적 느린편입니다.



4.Stack Area 

스택 영역은 호출된 메소드가 저장되는 영역입니다. 클래스의 실행은 메소드 호출을 의미하고,

메소드는 다른 메소드를 호출할 수 있습니다.  실행이 끝나면 저장된 메소드는 삭제됩니다.

데이터의 예로는 메소드가 실행 될 때마다 저장되는 매개변수, 지역변수, 복귀주소 등이 있습니다.



5. PC Register Area

레지스터 영역은 현재 JVM이 수행할 명령어의 주소를 저장하는 메모리 공간이며, 개발자가 크게 건들 일이 없다.



6. Native Method Stack Area (네이티브 메소드 스택 영역)

네이티브 메소드는 OS의 시스템 정보, 리소스를 사용하거나 접근하기 위한 코드로 주로 C, C++로 작성합니다.

자바 프로그램은 OS위에 JVM이 있기 때문에 OS 시스템에 직접 접근하기 어렵지만, JNI(Java Native Interface) API를 사용하면

OS시스템의 접근이 가능하다. 이 때 사용 되는 네이티브 메소드들이 대한 정보가 네이티브 메소드 스택 영역에 저장된다.









[참고 도서,자바를 다루는 도서 저 김병부, 길벗]

반응형

+ Recent posts