손영배 블로그 누구나 쉽게 이해하고 습득하기
자바 메모리 사용 영역 본문
JVM이 사용하는 메모리 영역. java.exe로 JVM이 시작되면 JVM은 운영체제에서 할당받은 메모리 영역(Rutime Data Area)을 다음과 같이 세부 영역으로 구분해서 사용한다.
1. 메소드(Methond) 영역
메소드 영역에는 코드에서 사용되는 클래스(~.class)들을 클래스 로더로 읽어 클래스별로
- 런타임 상수풀(runtime constant pool)
- 필드(field) 데이터
- 메소드(method) 데이터
- 메소드 코드
- 생성자(constructor) 코드 등을 분류해서 저장한다.
2. 힙(Heap) 영역
힙 영역은 객체와 배열이 생성되는 영역이다.
/**/
참조하는 변수나 필드가 없다면 의미 없는 객체가 되기 때문에 이것을 쓰레기로 취급하고 JVM은 쓰레기 수집기(Garbage Collector)를 실행시켜 쓰레기 객체를 힙 영역에서 자동으로 제거한다. 개발자는 객체를 제거하기 위해 별도의 코드를 작성할 필요가 없다. 사실 자바는 코드로 객체를 직접 제거시키는 방법을 제공하지 않는다.
//지울 수 있는 방법이 있는 걸로 안다.
3. JVM 스택(Stack) 영역
JVM 스택 영역은 각 스레드마다 하나씩 존재하며 스레드가 시작될 때 할당된다. 자바 프로그램에서 추가적으로 스레드를 생성하지 않았다며 main 스레드만 존재하므로 JVM 스택도 하나이다.
JVM 스택은 메소드를 호출할 때마다 프레임(Frame)을 추가(push)하고 메소드가 종료되면 해당 프레임을 제거(pop)하는 동작을 수행한다. 예외 발생 시 printStackTrace() 메소드로 보여주는 Stack Trace의 각 라인은 하나의 프레임을 표현한다.
프레임 내부에는 로컬 변수 스택이 있는데, 기본 타입 변수와 참조 타입 변수가 추가(push)되거나 제거(pop)된다. 변수가 이 영역에 생성되는 시점은 초기화가 될 때, 즉 최초로 변수에 값이 저장될 때이다. 변수는 선언된 블록 안에서만 스택에 존재하고 블록을 벗어나면 스택에서 제거된다.
출처 : https://programmer-seva.tistory.com/72
'Java' 카테고리의 다른 글
Java Collection sort 쓰는 방법 (0) | 2019.10.18 |
---|---|
Java 접근제한자 정리 (0) | 2019.05.12 |
Java 배열copy System.arraycopy() (0) | 2019.04.23 |
참조변수 비교연산은 주소값끼리의 비교다, NullPointerException,String (0) | 2019.04.23 |
자바 데이터 타입 분류 (0) | 2019.04.23 |