[SEB BE] Section 1. JVM

박두팔이·2023년 1월 10일
0

자바

목록 보기
20/26

학습내용

  • JVM이란?
  • JVM 메모리구조
  • 가비지 컬렉션이란?

JVM이란?

한마디로 정의하면 자바 프로그램을 실행시키는 독립적인 프로그램이다. 소스코드를 해석하고 실행하는 프로그램이라고 할 수 있다.

원래라면 내가 필요한 컴퓨터 자원을 운영체제로부터 할당받아야 한다. 그러나 운영체제마다 자원을 요청하는 방식이 다르기 때문에 프로그래밍 언어는 운영체제에 종속성을 갖게된다.

우리가 자바를 사용하는 이유는 아래와 같다.

  • 운영체제에 종속성을 갖지 않는 프로그래밍 언어이다.
    왜냐하면 컴퓨터 자원을 운영체제로 할당받기 위해 직접적으로 요청하지 않고 JVM이라는 통역가를 통해 소통하기 때문이다. JVM은 운영체제에 맞도록 개발되어있다. (windows/Linux/MacOs)

JVM의 구조

JVM구조 학습하기

💡 summary
.java(자바 소스코드) 👉🏻 컴파일결과: .class(바이트코드파일로 변환) 👉🏻 jvm이 운영체제로부터 코드실행에 필요한 메모리를 할당(Runtime Data Area) 👉🏻 클래스 로더가 .class바이트 코드파일을 메모리에 로드시킴(Class Loader) 👉🏻 .class의 바이트 코드 실행 (Execution Engine) 👉🏻 인터프리터를 통해 한줄씩 코드를 기계어로 번역하고 실행 👉🏻 특정 바이트코드가 중복하여 나오면 JIT Compiler(Just In Time Compiler)를 통해 바이트 코드 전체를 기계어로 번역하고 실행

Stack과 Heap

1. Stack? (= 후입선출, LIFO)
프로그램이 데이터를 저장하는 방식이다. 이것을 자료구조라고 한다. 스택은 이러한 자료구조의 한 방식이다. 스택은 LIFO “Last In First Out”의 약자로 회계용어로는 후입선출이라고 볼 수 있다. 나중에 들어온 것이 먼저나간다는 뜻이다.

JVM안에서 스택의 작동원리

메서드 내부는 다양한 값들이 존재한다. 예를들어 참조변수, 매개변수, 지역변수, 리턴값 등이 있다. 이러한 값들이 임시로 저장되는 곳이 메서드프레임이다. 메서드 프레임은 메서드가 호출되면 생성되는 공간이다. 메서드프레임이 스텍에 호출되는 순서로 쌓이다가 메서드의 동작이 완료되면 역순으로 제거된다.

2. Heap?
JVM이 작동되면 heap영역은 자동생성된다. 객체나 인스턴스 변수, 배열이 저장된다.
예를들면 Java java =new Java(); 로 인스턴스를 생성하면 new Java()가 실행될 때 heap영역에 인스턴스가 생성된다. 이 생성된 위치의 주소값을 java에게 주는데 이때 java는 스택영역에 선언된 변수이다.

객체를 다룬다는 것은 즉, 스택영역에 저장되어있는 참조변수를 통해 heap영역에 있는 객체를 다룬다는 의미다. 다시말하면 heap영역은 실제객체의 값이 저장되는 공간이다.

가비지컬렉션(Garbage Collection)

자바에는 메모리를 자동으로 관리하는 프로세스가 있는데 가비지 컬렉션은 프로그램에서 더이상 사용되지 않는 객체를 찾아 제거하여 메모리를 확보해준다.

heap영역의 객체는 대부분 일회성이며 메모리에 남아있는 기간이 짧을것이라는 전제로 설계되어있다.
힙은 객체의 생존시간을 기준으로 Young, Old영역으로 나뉜다.

Younh영역은 새롭게 생성된 객체가 할당되는 곳이며 이 영역에서 활동하는 가비지 컬렉터를 Minor GC라고 한다. Old영역은 Young영역에서 상태를 유지하고 살아남은 객체들이 복사되는 곳이며 young영역보다 크며 가비지가 적게 발생한다.

  • Minor GC : Young 영역에서 활동하는 가비지 컬렉터
  • Major GC : Old 영역에서 활동하는 가비지 컬렉터

가비지컬렉션의 2가지 단계

Stop The World를 통해 모든 작업이 중단되면 가비지컬렉션이 변수와 객체를 탐색한 뒤 사용되는 메모리를 식별(Mark)하고 사용되지 않는 메모리는 제거(Sweep)한다.

1. Stop The World
: 가비지컬렉션을 실행하기 위해 JVM이 애플리케이션의 실행을 멈추는 작업이다.

가비지 컬렉션이 실행되면 모든 스레드들의 작업은 중단되고(가비지컬렉션을 실행하는 스레드는 제외) 가비지정리가 완료되면 다시 재개된다.

2. Mark and Sweep
: Mark는 사용중인 메모리를 식별 한 뒤 Sweep이 사용되지 않는 메모리는 제거한다.

profile
기억을 위한 기록 :>

0개의 댓글