티스토리 뷰
3~4장은 연산자,조건,반복문 기본적인 내용임으로 PASS
1. Runtime Data Area : JVM 이 시작되고 운영체제에서 할당받은 메모리 영역.
Runtime Data Areas
- Method (Static) Area: JVM이 읽어들인 클래스와 인터페이스 대한 런타임 상수 풀, 멤버 변수(필드), 클래스 변수(Static 변수), 생성자와 메소드를 저장되는 공간으로, 모든 스레드에서 공유한다.
- Runtime Constant Pool
- 메소드 영역에 포함되지만 독자적 중요성이 있다.
- 클래스 파일 constant_pool 테이블에 해당하는 영역이다.
- 클래스와 인터페이스 상수, 메소드와 필드에 대한 모든 레퍼런스를 저장한다.
- JVM은 런타임 상수 풀을 통해 해당 메소드나 필드의 실제 메모리 상 주소를 찾아 참조한다.
- 메소드 영역/런타임 상수 풀의 사용기간 및 스레드 공유 범위
- JVM 시작시 생성
- 프로그램 종료 시까지
- 명시적으로 null 선언 시
- 구성 방식이나 GC 방법은 JVM 벤더마다 다를 수 있다.
- 모든 스레드에서 공유한다.
- Heap Area
- JVM이 관리하는 프로그램 상에서 데이터를 저장하기 위해 런타임 시 동적으로 할당하여 사용하는 영역이다.
- New 연산자로 생성된 객체 또는 객체(인스턴스)와 배열을 저장한다.
- 힙 영역에 생성된 객체와 배열은 스택 영역의 변수나 다른 객체의 필드에서 참조한다.
- 참조하는 변수나 필드가 없다면 의미 없는 객체가 되어 GC의 대상이 된다.
- 힙 영역의 사용기간 및 스레드 공유 범위
- 객체가 더 이상 사용되지 않거나 명시적으로 null 선언 시
- GC(Garbage Collection) 대상
- 구성 방식이나 GC 방법은 JVM 벤더마다 다를 수 있다.
- 모든 스레드에서 공유한다.
- Stack Area
- 각 스레드마다 하나씩 존재하며, 스레드가 시작될 때 할당된다.
- 메소드를 호출할 때마다 프레임(Frame)을 추가(push)하고 메소드가 종료되면 해당 프레임을 제거(pop)하는 동작을 수행한다.
- 선입후출(FILO, First In Last Out) 구조로 push와 pop 기능 사용
- 메소드 호출 시 생성되는 스레드 수행정보를 기록하는 Frame을 저장
- 메소드 정보, 지역변수, 매개변수, 연산 중 발생하는 임시 데이터 저장
- 기본(원시)타입 변수는 스택 영역에 직접 값을 가진다.
- 참조타임 변수는 힙 영역이나 메소드 영역의 객체 주소를 가진다.
- PC Register
- 현재 수행 중인 JVM 명령 주소를 갖는다.
- 프로그램 실행은 CPU에서 인스트럭션(Instruction)을 수행.
- CPU는 인스트럭션을 수행하는 동안 필요한 정보를 CPU 내 기억장치인 레지스터에 저장한다.
- 연산 결곽값을 메모리에 전달하기 전 저장하는 CPU 내의 기억장치
- Native Method Stack Area
- 자바 외 언어로 작성된 네이티브 코드를 위한 Stack이다.
- 즉, JNI(Java Native Interface)를 통해 호출되는 C/C++ 등의 코드를 수행하기 위한 스택이다.
- 네이티브 메소드의 매개변수, 지역변수 등을 바이트 코드로 저장한다.
2. String 참조 변수에 대한 이해
String a = "Jinhyy";
String b = new String("Jinhyy");
첫 번째 초기화 방법은 Heap 영역에 Jinhyy 리터럴로 생성된 스트링 객체를 만든다.
후에 String c = "Jinhyy" 라고 한다면, 자바에서 알아서 Jinhyy 값을 갖는 이미 만들어진 스트링 객체를 찾아서 참조한다.
(그래서, a == c 는 true 이다.)
하지만, new 를 쓰는 경우, 같은 리터럴이 이미 존재하더라도, 새로운 객체를 Heap 영역에 만들어 준다. 그래서 Heap 메모리 주소가 틀리다.
* 정리 *
JVM의 메모리 구조는 크게 메소드(클래스관련 필드,메소드 데이터 저장), 힙영역(객체 or 배열), 스택영역(변수, 스레드마다 한개씩) 으로 구분된다.
String 은 참조 변수이자 객체이다.
'PL > Java' 카테고리의 다른 글
8. 인터페이스 (0) | 2018.09.04 |
---|---|
7. 상속, 오버라이딩, final 클래스, protected, 다형성, 추상클래스, 인터페이스 (0) | 2018.08.24 |
6-1 . OOP, 객체, final, 싱글톤, 클래스변수. (0) | 2018.08.24 |
2. 변수, String에 대한 이해, 타입변환 (0) | 2018.08.22 |
1. 자바 개념 / 특징 / jvm / main method (0) | 2018.08.22 |