자바 JDK, JRE, JVM

Kim Dong Kyun·2022년 11월 30일
0

Today I learned

목록 보기
12/43

1. JDK

JRE와 JVM을 포함하는, 컴파일러가 구성된 소프트웨어 개발 통로

큰 단위라고 보아도 좋다.

1-1 코드가 실행되는 과정.

개발자에 App.java에 입력하면, 자바 컴파일러(javac)가 이것을 바이트 코드로 바꾸어서 JRE -> JVM으로 넘겨준다. 이것을 OS에서 받아서, Hardware로 송출하는 방식.

2. JRE

JRE : java.lang(자바 클래스 라이브러리)등 JVM이 원할하게 작동하게 해주는 환경 조성

우리가 사용하는 math, system.out.println()등 javalang 외 JVM이 원할하게 작동하게 해주는 환경을 조성한다.

3. JVM

JVM의 구조는 위와 같다.

  • 클래스 로더 서브시스템

    • .class 에서 바이트코드를 읽고 메모리에 저장.

    • 컴파일된 클래스(.class 파일)을 메모리에 적재하는 것이 클래스로더(class loader)의 주요 작업. 보통, 클래스 로딩 과정은 메인 클래스(즉, static main() 메서드 선언이 있는 클래스)를 로드하는 것부터 시작됩니다.

    • **참고한 링크. 매우 중요 근데 어렵다.**

    • 아래 상황에서도 사용된다. (static!!)

  • 메모리

    • 메소드 영역(Method Area).
    • 힙 영역에는 객체(instance)를 저장.
    • 스택 영역에는 스레드마다 런타임 스택을 만들고, 스택 프레임이라 부르는 블록을 쌓는다. 다른 스레드의 스택영역엔 접근 할 수 없다.
  • 실행엔진

    • JIT 컴파일러가 반복되는 코드를 재사용해서 속도를 높인다.
    • GC : 더이상 참조되지 않는 객체를 모아서 정리한다. (garbage cleaner)
  • 클래스 로더 시스템

    • Loading

      • 클래스 로더가 .class 파일을 읽고 데이터를 “Method Area”영역에 저장
        • 메소드 영역에 저장하는 데이터들
          • FQCN(Fully Qualified Class Name) : package를 포함한 Class이름 → java.lang.String
          • 클래스 | 인터페이스 | 이늄
          • 메소드와 변수(클래스내의 매서드의 변수, 패러미터와 아규먼트 등만)
    • Initalization

      • Static“ 붙은 친구들 초기화. static 블럭 실행
  • Method Area 는 클래스 영역 또는 스태틱 영역이라고 한다.

  • Stack 영역은 Thread 영역이라고 한다.

  • 매서드 영역, Stack Heap의 더 자세한 내용들의 링크

자바의 메모리 구조 영역 Method Heap Stack

Method Area와 JVM Stack, Heap 메모리의 구조와 용도

  • 메모리를 이용하는 방식

    • 가장 간략하게 프로그램이 메모리를 사용하는 방식

      → 스태틱 영역 : 클래스와 static 친구들

      → 스택 영역 : 메서드들

      → 힙 영역 : 객체(Instance)들

의문 1. Method 에리어에서 클래스 매서드 인스턴스까지 핸들한다고?

→ Static 영역에 들어가는 메소드와 변수는 메소드 시그니처(패러미터, 아규먼트==인자)와, 변수의 타입만 들어갑니다!

→ Stack과 Heap은  이 Static 영역에있는 클래스와 메소드를 가지고 동작하는 코드(데이터가 담긴)가 생성되어서 동작합니다.

즉 Static 영역에서는 Class의 정보라 할 수 있는 것을 처리하고, Stack과 Heap은 매서드와 인스턴스를 각각 처리한다.

내가 정리한 노션

https://shard-nylon-2d6.notion.site/1130-467ffa403b0542519dc6a635b8a3f320

0개의 댓글