[Java] JDK, JRE, JVM&GC

dangddoong·2022년 12월 1일
0

참고문헌

DZone - "Java Memory Management"

DZone - "The JVM Architecture Explained"

Oracle - "Java Garbage Collection Basics"

Mohammed Aboullaite - "Understanding JIT compiler (just-in-time compiler)"

sgwon1996 - JVM 구조와 JAVA의 동작 원리 (velog) - 개인적으로 이 글을 추천합니다.

joona - JAVA는 컴파일 언어일까, 인터프리터 언어일까? (tistory)

주누 - [autoBoxing, unBoxing의 이해]

글 읽는 순서 추천 가이드라인
1. 참고 문헌의 링크들을 다 읽는다.
2. 아래 글을 슥 보면서 keyword만 얻어간다.
3. keyword를 구글링 하면서 추가적인 학습을 한다.

4. 아직 배움이 부족해 부득이하게 가이드라인을 제시하는 글쓴이의 마음을 이해해준다.


코드가 실행되는 과정

JDK(Java Development ToolKits) 구조

JRE(Java Runtime Environment)


JVM 구조

  • JVM 구조

    • 클래스 로더 서브시스템
      • .class 에서 바이트코드를 읽고 메모리에 저장.
    • 메모리
      • 메소드 영역(Method Area).
      • 힙 영역에는 객체를 저장.
      • 스택 영역에는 스레드마다 런타임 스택을 만들고, 스택 프레임이라 부르는 블록을 쌓는다.
    • 실행엔진
      • JIT 컴파일러가 반복되는 코드를 재사용해서 속도를 높인다.
      • GC : 더이상 참조되지 않는 객체를 모아서 정리한다.
    • JNI(Java Native Interface)
      • C, C++, 어셈블리로 작성된 함수를 사용할 수 있는 방법 제공.
      • 자바에서 기본으로 제공되는 메서드에 native 키워드를 가 붙은 친구.
    • 네이티브 메소드 라이브러리.
      • C, C++로 작성된 라이브러리.
  • Class Loader Subsystem ->> 참고링크: JVM Architecture

    • Loading
      • 클래스 로더가 .class 파일을 읽고 데이터를 “Method Area”영역에 저장
        • 메소드 영역에 저장하는 데이터들
          1) FQCN(Fully Qualified Class Name) : package를 포함한 Class이름
          2) 클래스 | 인터페이스 | 이늄
          3) 메소드와 변수
    • Linking
    • Initialization
      - “Static“ 붙은 친구들 초기화. static 블럭 실행

Stack & Frame

Stack

  • Stacke은 Frame이라는 자료구조를 저장한다.
  • Stack은 C 같이 전통적인 언어의 스택 구조와 비슷하다.
    • 지역 변수, 함수의 실행 결과를 저장하며 함수 호출과 반환을 담당한다.

Frame

  • 프레임은 데이터, 반환 값을 저장하는 자료구조이다.
  • 프레임은 함수가 호출될 때 생성되고 함수가 종료되면 사라진다.
  • 각 프레임은 지역 변수 배열, Operand Stack, Run Time Constant Pool에 대한 참조값을 지닌다.
  • 클래스파일의 함수에 대한 접근은 Runtime Constant Pool에 존재하는 심볼릭 링크를 통해 접근 가능하다.
  • 동적 할당은 코드 실행 시점에 심볼릭 링크를 해석해 고정된 주소값으로 변환시킨다.
  • 심볼릭 링크를 통한 late-binding은 객체 지향의 핵심이다.

    심볼릭 링크??? - [참고영상 "생활코딩 - 참조와 복제"]


추가공부 (실행엔진과 Garbage Collector)

실행엔진

Garbage Collector

Keyword

  • Block, Scope
  • Auto Boxing / Unboxing
  • Call By Value
  • Mutable / Immutable
profile
맛있는 음식과 여행을 좋아하는 당당한 뚱땡이

0개의 댓글