Assembled by yunjin (2021-07-15)
- JVM
- 바이트 코드를 실행시키기 위한 가상머신입니다. - 메서드 영역
- JVM이 구동될 때 생성됩니다.
- 클래스별로 클래스 정보와 필드와 메소드 데이터, 메소드 및 생성자 코드, 상수가(Static, final, 문자열 상수 String)저장되는 영역이다. - 힙 영역
- 객체와 배열이 생성되는 영역입니다.
- JVM 스택 영역에서 생성된 변수나 다른 객체의 필드를 해당 영역의 객체와 필드에 참조합니다.
- GC을 수행합니다. - 스택 영역
- 스레드가 시작될때 할당되며 메서드가 호출되면, 메서드의 매개변수와 지역변수가 저장되는 영역이다.
- 자바 애플리케이션을 개발하고 실행하기 위한 자바 플랫폼 3대 구성 요소입니다.
- 자바 개발 도구 (JDK, Java Development Kit)
- 자바 프로그램에 필요한 JVM, 라이브러리 API, 컴파일러 등 개발 도구가 포함된 소프트웨어 패키지 - 자바 실행 환경 (JRE, Java Runtime Environment)
- 자바 프로그램 실행에 필요한 JVM, 라이브러리 API가 포함된 소프트웨어 패키지
- 자바 가상 기계 Java Virtual Machine
- 바이트 코드 파일을 해당 운영체제에서 실행 가능한 기계어로 변역 후 실행할 수 있게 해주는 가상의 운영체제입니다.
- 메모리 관리 및 Garbage Collection을 수행합니다.
+여기서 잠깐
바이트 코드(Byte Code) 파일이란?
- .Class 확장자이며 자바 소스 파일을 javac에 의해 컴파일된 파일입니다.
- 바이트 코드 파일은 운영체제에서 바로 실행할 수 없고, JVM을 통해 번역이 필요합니다.
+여기서 잠깐
GC란?
- 쓰레기 수집기 Garbage Collection
- 자바 메모리 관리 기법 중 하나로, 자바에선 JVM GC를 이용해 사용하지 않는 객체를 메모리에서 자동으로 제거해줍니다.
- java.exe로 JVM이 시작되면 JVM은 운영체제에서 할당받은 메모리 영역(Runtime Data Area)을 다음 아래와 같이 세부 영역으로 구분하여 사용합니다.
- JVM이 구동될 때 생성되며 모든 스레드가 공유하는 영역
- JVM이 읽어들인 클래스, 인터페이스에 대한 런타임 풀 상수, 메소드와 필드, Static 변수, 메소드 코드, 생성자(Constructor) 코드 등 저장
Field Information
- 멤버변수 접근 제한자, 데이터 타입, 이름에 대한 정보Method Information
- 메서드 접근 제한자, 리턴타입, 이름, 매개변수에 대한 정보Type Information
- Type의 속성이 Class인지 Interface인지 여부 저장
- Type의 전체이름(패키지명 + 클래스명)Static Variable
- 모든 객체가 공유할 수 있고, 객체 생성없이 접근 가능.constant Pool(상수 풀)
- Type에서 사용된 상수를 저장하는 곳 (중복이 있을 시 기존 상수 사용)
- (String)문자 상수, 타입, 필드, Method의 Symbolic reference(객체 이름으로 참조하는 것)도 상수 풀에 저장
- final class 변수의 경우에도 상수풀 값에 복사
+여기서 잠깐
final 변수란?
- final로 선언된 변수가 할당되면 항상 같은 값을 가진다.
- 객체와 배열이 생성되는 영역 (참조형 referense type의 데이터 타입을 갖는)
- 해당 영역에 생성된 객체, 배열은 JVM 스택(Stack) 영역에서 생성된 변수나 다른 객체의 필드에서 이 곳에 있는 객체와 배열을 참조한다.
- 참조하는 변수나 필드가 없다면 GC에 의해 자동으로 제거한다.
- 프로그램 실행 중 생성되어 동적할당됨.
Young Generation(Eden, surv1, surv2)
- 생성된지 얼마 안되는 객체가 저장되는 공간
- 시간이 지남에 따라 우선순위가 낮아지면 Old 영역으로 옮겨진다.
- 객체가 사라질때 Minor GC 발생Old Generation
- YG 영역에서 저장된 객체 중 오래된 객체가 이동되어서 저장되는 영역
- 객체가 사라질때 Major GC(Full GC) 발생Pem(Permanent) 영역
- Class Loader에 의해 Load되는 class, method 등에 대한 Meta 정보가 저장되는 영역으로, JVM에 의해서 사용됩니다.
-
+여기서 잠깐
필드(field)란?
- 클래스 내부 멤버입니다. 클래스 안에 독립적으로 선언된 변수입니다. 메소드 밖에 정의됨.
- 클래스 변수, 멤버 변수라고 함. -
+여기서 잠깐
동적할당이란?
- 컴퓨터 프로그래밍 실행 시간 동안 사용할 메모리 공간을 할당하는 것을 말합니다.
- 메서드 안에서 사용되는 값들을 저장 (메서드 정보, 매개변수, 지역변수, 연산 중 발생하는 임시 데이터)
- 메서드 호출 시 생성되는 스레드 수행 정보를 기록하는 프레임(Frame) 생성
- 메스드 수행이 끝나면 프레임(Frame)별로 삭제.
- 메서드를 호출 시 프레임(Frame)을 추가(Push)하고 메서드가 종료되면 해당(Frame)을 제거(Pop)한다.
- 실행 순서에 따라 생성되고 소멸된다. Last In First Out(LIFO) 선입후출 구조