본문 바로가기
개발공부 개발새발/JAVA

JAVA ) GC & JVM

by 휴일이 2023. 7. 21.

GC (Garbage Collection) 이란 ?

  • 안 쓰는 메모리를 알아서 정리해준다.

그건 어떤 메모리인가요?

  • Null 선언된, 가리키는 주소(참조)가 없어진 객체.

실행되는 과정

  • Stop The World
    • 가비지 컬렉션이 동작하기 위해 JVM이 애플리케이션 실행을 멈춘다.
    • GC 실행 쓰레드를 제외한 모든 쓰레드가 작업을 중지한다.
  • Mark And Sweep
    • Mark : 사용되지 않는 메모리를 식별한다.
    • Sweep : 식별한 메모리를 제거한다.

특징

  • Java는 GC가 직접 메모리 관리를 해줘서 편리하다
  • 다만 GC가 따로 돌아가는 과정이 추가돼서 좀 느리다.

*그래서 게임 서버 같은 경우는 직접 메모리를 해제하는 C/C++ 등의 언어를 사용한다.


JVM (Java Virtual Machine) 이란 ?

  • JVM 은 OS 위에 돌아가며, 자바 프로그램을 OS 에 상관없이 동작하게 해준다.
  • 프로그램 메모리를 관리하고 최적화해준다.

단점

  • 일반 애플리케이션 코드는 OS → 하드웨어
  • JAVA 는 JVM → OS → 하드웨어
  • 게다가 실행시에 해석되기 때문에 속도가 좀 느리다.

JVM 의 메모리 구조

Method Area (Static)

  • 클래스, static 변수, method, 상수 정보 등이 저장되는 영역

Stack Area

  • 각 쓰레드마다 하나씩 생성된다. 선입후출.
  • 실행되는 메서드가 하나씩 쌓인다. 그래서 지역변수도 여기에 저장된다. 실행이 종료되면 사라진다.

Stack Area

  • new 명령어로 생성된 객체들이 저장된다. 그래서 인스턴수 변수도 여기에 저장된다.
  • 여기에 저장되는 메모리들이 GC 로 지워지는 메모리들이라고 보면 된다.

그 외

PC Register

  • JVM 의 주소 값이 저장된다.

Native Method Stack

  • 다른 언어의 메서드 호출을 위해 할당된다. (C/C++ 등)
  • 그 구역 언어에 맞게 Stack이 형성된다.

JAVA의 실행 과정

  1. .java 파일을 컴파일러가 .class 파일로 만든다. 소스 코드를 java 바이트 코드로 변경하는 것이다.
  2. 클래스 로더가 JVM 내로 class 파일들을 load 한다.
  3. Java 바이트 코드를 JVM이 읽고 실행한다.

자바 바이트 코드 ?

  • JVM이 이해할 수 있게 변환 된 자바 소스 코드

 

728x90