JRE와 JVM을 포함하는, 컴파일러가 구성된 소프트웨어 개발 통로
큰 단위라고 보아도 좋다.
개발자에 App.java에 입력하면, 자바 컴파일러(javac)가 이것을 바이트 코드로 바꾸어서 JRE -> JVM으로 넘겨준다. 이것을 OS에서 받아서, Hardware로 송출하는 방식.
우리가 사용하는 math, system.out.println()등 javalang 외 JVM이 원할하게 작동하게 해주는 환경을 조성한다.
JVM의 구조는 위와 같다.
클래스 로더 서브시스템
.class 에서 바이트코드를 읽고 메모리에 저장.
컴파일된 클래스(.class 파일)을 메모리에 적재하는 것이 클래스로더(class loader)의 주요 작업. 보통, 클래스 로딩 과정은 메인 클래스(즉, static main() 메서드 선언이 있는 클래스)를 로드하는 것부터 시작됩니다.
**참고한 링크. 매우 중요 근데 어렵다.**
아래 상황에서도 사용된다. (static!!)
메모리
실행엔진
클래스 로더 시스템
Loading
Initalization
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