suleesulee
suleesulee
suleesulee
전체 방문자
오늘
어제
  • 분류 전체보기 (39)
    • Personal (7)
      • 개발자sulee (2)
      • 회고록 (1)
      • 여행 (0)
    • Computer Science (31)
      • JAVA (4)
      • Python (0)
      • Html&CSS (0)
      • Spring (1)
      • JPA (1)
      • MSA (12)
      • Algorithm (10)
      • DevOps (0)
      • Go (1)
      • Swift (1)
      • 기타 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 개발자 sulee의 블로그입니다.

인기 글

태그

  • 백엔드
  • 카카오
  • 이직뽀개기
  • 회고
  • 이직
  • 개발자
  • MSA
  • Monolithic
  • 네이버
  • 나의 재취업 도전기
  • 전문연
  • 전문연구요원
  • SOA
  • 라인

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
suleesulee

suleesulee

Computer Science/JAVA

JVM, GC 살펴보자 1

2021. 9. 4. 14:26

웹 개발자 기술 면접의 단골 문제 중 하나인 JVM, GC에 대해서 살펴보자.

해당 회사가 JAVA 기반이라면 높은 확률로 물어본다.

경력의 경우는 별로 중요해보이지 않지만

신입 면접에 경우 필자도 JVM GC 설명을 해보세요 하는 질문을 받아봤고

많은 사람들이 받아본 문제 중 하나다.

 

JVM

자바 버츄얼 머신의 약자로 자바로 만든 프로그램을 읽어들여 실행하는 것이다.

OS와 JAVA 사이의 중간 역할을 하는 것으로

이로 인해 JAVA는 JVM만 실행가능하다면 OS와 상관없이 동작할 수 있다.

JVM은 메모리 관리를 자동으로 해주는데 이것을 Garbage Collection(GC)라고 한다.

(C와 다르게 메모리를 개발자가 관리하지 않아도 된다.)

 

JVM의 구성 요소

Class Loader

JVM으로 클래스를 가져오고 링크를 통해 배치 시킨다.

Runtime에 동적으로 클래스를 Runtime Data Area로 올린다.

 

Excute Engine

메모리의 바이트 코드들을 op코드로 변환해 실행한다.

2가지 방식이 존재함

1. Interpreter

 명령어를 하나씩 수행(상대적으로 느림)

2. JIT(Just-In time)

 전체 바이트코드를 네이티브 코드로 다 변환한뒤 네이티브 코드를 실행

 (컴파일 해야하는 시간이 발생하지만 빠름)

 

GC

가비지 콜렉터를 수행하는 스레드

Runtime Data Area의 HEAP 영역에 참조되지 않는 객체들을 찾아서 메모리를 해제함

언제 일어날지 보장이 되지 않으며, GC 수행시 GC 쓰레드 이외의 모든 쓰레드는 일시정지됨.

 

Runtime Data Area

이 영역은 JVM의 메모리 영역으로 실행중인 JAVA프로그램의 데이터들을 적재하는 영역이다.

5가지 영역으로로 나눌수 있다.

 

1.Method 영역

클래스, 인터페이스 정보, static변수, 리턴 타입, 파라미터. Runtime constant pool 등이 저장되는 영역으로

모든 Thread에 공유되au  영역이다.

 

2.Heap 영역

new 키워드로 생성된 것들의 메모리 영역이며 GC가 주 타겟팅으로 잡는 곳이다. 

Heap 영역도 구역이 나눠진다.(이것은 2편에 다룰예정이다.)

 

3.Stack 영역

메소드 데이터(지역변수, 파라미터, 연산에 사용된 임시값, 리턴값 등)를 저장하기 위한 영역

Thread마다 각각 독립적으로 생성되는 영역이다.

 

4.PC 레지스터

현재 쓰레드가 실행되는 부분의 주소와 명령을 저장 Thread가 생설 될 때마다 생성되는 영역

쓰레드가 실행되는 부분의 주소와 명령을 저장하고 있다. 이것을 통해 쓰레디를 돌아가며 수행 할 수 있다.

 

5.Native Method stack

자바가 아닌 언어로 작성된 네이티브 코드를 위한 영역(C/C++이 주로)

 

 

 

참조

https://jeong-pro.tistory.com/148

https://mirinae312.github.io/develop/2018/06/04/jvm_memory.html

 

저작자표시 비영리 변경금지 (새창열림)

'Computer Science > JAVA' 카테고리의 다른 글

JVM, GC 알아보자 3  (1) 2021.09.14
JVM, GC 살펴보자 2  (0) 2021.09.09
SOLID 5원칙 (좋은 객체지향 설계란.)  (0) 2021.09.07
    'Computer Science/JAVA' 카테고리의 다른 글
    • JVM, GC 알아보자 3
    • JVM, GC 살펴보자 2
    • SOLID 5원칙 (좋은 객체지향 설계란.)
    suleesulee
    suleesulee
    IT Engineer, SW Developer, Traveler

    티스토리툴바