jvm

HG·2022년 10월 28일
0

자바

목록 보기
4/4

jvm이란?

내 생각

자바에서의 메모리,

그냥 부분 할당하는 것 아닐까? 그냥 뭔가 대단한 것 아닐 것 같다.


jvm은 java virtual machine

자바 가상 머신으로 자바 바이트 코드를 실행할 수 있는 주체다.

자바와 운영체제 사이에서 중개자 역살을 수행하고, 자바가 운영체제에 구애 받지 않고 프로그램을 실행할 수 있도록 도와준다.

또한, 가비지 컬렉터를 사용해 메모리 관리를 자동으로 수행하며, 다른 하드웨어와 다르게 레지스터 기반이 아닌 스택 기반으로 동작한다.

jvm을 알기 위해선

java source 인 .java 파일이 java 컴파일러를 통해 바이트 코드로 변환된다.

그리고 바이트코드가 jvm에서 읽어들이고, 운영체제든간에 프로그램을 실행할 수 있게 한다.

jvm 메모리 구조를 이해하기 위해선

jvm안에 어떤 구조로 녹아있는지 알면 좋다.

  1. 일단 jvm이 운영체제로부터 할당받은 메모리 영역인 runtime data area로 class loader가 class 파일을 엮어서 적재한다.

  2. execution engine을 ㅌ오해 메모리에 적재된 클래스들을 기계어로 변경해 명령어 단위로 실행하는 역할을 한다.

  3. garbage collecter 를 통해 heap 메모리 영역에 생성된 객체들 중 참조되지 않은 객체들을 탐색후 제거한다.
    GC가 활동하는 시간이 언제인지 보장할 수 없다. 또 GC가 수행하는 쓰레드가 아닌 모든 다른 쓰레드는 일시정지한다.
    full gc가 일어나서 수초간 모든 쓰레드가 정지한다면 장애로 이어지는 치명적인 문제 생성 가능

  4. runtime data area은 jvm 메모리 영역으로 자바 애플리케이션 실행시 사용되는 데이터들을 적재하는 영역이다.

method area, heap area, stack area, pc register, native method stack

1) method area 클래스 멤버 변수의 이름, 데이터 타입, 접근 제어자 정보같은 필드 정보와 메소드 이름, 리턴 타입, 파라미터, 접근 제어자 정보같은 메소드 정보, type , static변수 final 변수
  final class등이 생성되는 영역이다.

2) heap area new 키워드로 생성된 객체와 배열이 생성되는 영역이다.
  메소드 영역에 로드된 클래스만 생성 가능, garbage collecter가 참조되지 않는 메모리를 확인하고 제거하는 영역이다.

3)stack area 지역변수, 파라미터, 리턴 값, 연산에 사용되는 임시 값들이 생성되는 영역이다.
  클래스 Person p = new Person() 을 만들면, Person p 는 stack에 new 로 생성된 Person 클래스의 인스턴스는 힙 영역에 생성된다. 
  그리고 스택영역에 생성된 p의 값으로 힙 영역의 주소값을 가지고 있다. 즉, stack 영역에 생성된 p가 힙 영역에 생성된 객체를 가리키고(참조)하고 있는 것이다.
  메소드를 호출할 때마다 개별적 스택이 생성된다.

4)PC Register 쓰레드가 생성될 때 마다 생성되는 영역으로 프로그램 카운터. 즉, 현재 쓰레드가 실행된느 부분의 주소와 명령을 저장하고 있는 영역이다.
  이것을 이용해서 쓰레드를 돌아가면서 수행할 수 있게 한다.

5) native method stack 자바 외 언어로 작성된 네이티브 코드를 위한 메모리 영역

1) 2)가 모든 쓰레드가 공유하고 3) 4) 5) 는 쓰레드마다 생성되고 공유되지 않는다.

6) garbage collecter 작동 원리-> heap 영역 5개로 나눠져있는데 그중 순서대로 차면 비우고, 차면 비우고를 반복한다.
   그래도 참조되는 값은 old영역으로 가게된다.
   major gc가 일어나면, old영역에 있는 참조가 없는 객체들을 표시하고 그 해당 객체들을 모두 제거하게된다.
profile
Making Body, Making Food, Making Co?de

0개의 댓글