반응형
Notice
Recent Posts
Recent Comments
Link
«   2025/09   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Archives
Today
Total
관리 메뉴

웹풀스택 공부 중

14 - 2. Java - JVM 본문

웹개발/Java

14 - 2. Java - JVM

lukeit 2024. 11. 4. 13:02

14 - 2. Java - JVM

JVM (Java Virtual Machine)

JVM은 이거 3개만 기억하면 된다는데…

  1. Class Loader - 실행을 위한 Bytecode를 가져온다
    1. 실행을 위한 Class들만 가져온다
    2. 동적 로딩으로 필요한것만 꺼내서 쓸 수 있다!
  2. Rutime Data Area - 메모리에 얹는다
  3. Execution Engine - 엔진 구동

Runtime Data Area의 영역

  • Thread Area

    • Stack영역 - 각각의 Thread가 가지고 있다
      • 기본타입 변수 (Primitive)는 Stack 영역에 직접 값을 가진다
        • private Integer v1
      • Reference Type Variable은 Heap 영역에 객체 주소 값을 가진다
        • private int v2
  • Non-Thread Area

    • 공유 영역 - 모든 Thread가 공유한다

    • Method/Static 영역: 전역 변수, Static 변수, Final Class, Class의 필드와 메서드 정보등을 가진다

      • 프로그램 시작부터 끝까지 메모리에 상주한다
      • Static 영역: 객체화하지 않고 호출이 가능하다!
        • 그래서 Heap 영역을 사용하지 않는다
    • Heap 영역: 객체 (Instance, 배열)을 저장한다

      • Garbage Collector의 대상이다!

      • 3 가지로 나눠진다

        • Application에서 사용중인
          • Young Generation
          • Tenured (Old) Generation
            • 이곳이 GC에 의해 지워진다
        • JVM에서 사용중인
          • Permeanent Generation
      • Java에서 Out-of-Memory error가 발생한경우, Heap 쪽에서 문제가 일어난곳이다

        • 클래스를 과다하게 로딩하는 경우는 드물고
        • Thread를 많이 만들어도 Thread Pool에 의해 막힌다
        • 너무 많은 객체를 만들거나 사용한 객체를 치우지 않아서 생긴다

Garbage Collector

프로그램을 실행한다는 것 = 메모리에 필요한 함수나 객체를 올려서 실행한다는 것 = 다 쓰고나서 치워야한다는 것

  • “설거지”
  • Jav에서 JVM이 대신 프로그램이 생성한 객체를 자체 알고리즘으로 알아서 치워준다
  • Minor GC / Major GC 모두 Stop-The-World Event이다
    • STWE: 다른 스데르를 모두 멈춘다
      • 메모리 영역을 잠구고 치운 후 다시 연다!
      • 이 시간을 줄이면 더 효율적이긴하다
  • 효율적으로 동작시키기 위해 Heap 영역을 크게 2개의 물리적 공간으로 나눈다
    • Young Generation
      • 높은 주기, 짧은 시간
      • Eden
      • Survivor 0
      • Survivor 1
        • 여기서도 계속 사용이 된다면 Old Generation으로 옮겨진다
    • Old Genreration
      • 낮은 주기, 긴 시간

Runtime Data Area (JVM Memory)

영역에 따른 3가지 Java의 변수 분류

  • 정적(클래스) 변수 (Static Variable)
    • 클래스 내 필드/메서드와 정적 필드 / 메서드
    • ⇒ Method/Static 영역
  • 인스턴스(객체) 변수 (Instance VariablE)
    • new keyword로 인스턴스 생성 시 생성자로 적재한다
    • ⇒ Heap 영역
  • 지역 변수 (Local Variable)
    • 메서드 호출 시 필요한 파라미터나 내부 변수이기에
    • ⇒ Stack 영역에 적재한다
반응형