728x90

자바 프로그램을 실행하면 JVM은 필요한 데이터를 메모리에 생성한 후 사용하는 구조이다
이때 메모리의 구조는 세가지 영역으로 구분된다.
1. Code 영역
흔히 메서드 영역이라고도 부른다.
a.class 파일을 실행한다고 가정해보자.
JVM의 클래스 로더가 a.class 파일을 실행하기위해
필요한 클래스 파일을 메모리에 올린다.
이때 메모리에 올린다는것은 자바 소스 파일(a.java)에 정의한 클래스에 관한
정보와 코드를 Code 영역에 만들어주는 것을 의미한다.
2. Heap 영역
개인적으로 제일많이 접하게되는 영역이 아닌가싶다.
개발자가 클래스를 설계한뒤, 설계했으면 인스턴스를 생성해야하지않겠능가?
이때 new 명령문으로 인스턴스를 생성하는데 ,
생성되는 장소가 바로 Heap 영역이다
new a();
new a();
new a();
a 클래스를 3번 생성한다고 치자, 그렇다면 Heap 메모리 영역에는 3개의 똑같은
인스턴스(객체)가 생성되는것이다.
(Spring에서는 싱글톤에 의하여 1개만 생성되게하는 내용이 있다.)
여기서 특별히 알아둬야하는게 있는데.
실제로 클래스의 메서드는 Heap 메모리 영역에 만들어 지지 않는다 !!!?
메서드 코드는 이미 실행 시작 시점에 클래스 로더에 의해 코드영역에 만들어지고
이후에 다시 메모리에 만들어지지 않는다.
그렇다면
실제로 힙 메모리에 필드만 생성되는 꼴이다.
3. Stack 영역
변수가 저장되는 곳이다
728x90
'개발 > java' 카테고리의 다른 글
ArrayList 과 제네릭 (0) | 2021.03.18 |
---|---|
배열을 알아보자 (0) | 2021.03.18 |
필터 스트림 (0) | 2021.03.18 |
파일 입출력으로 파일 복사하기 (0) | 2021.03.18 |
printf() 의 지시자 (0) | 2021.03.15 |