2023. 2. 6. 15:44ㆍJAVA
자바의 메모리 사용
자바를 사용하여 프로그램을 만들다보면
우리가 만든 프로그램이
컴퓨터 메모리에 어떻게 접근하는 공부해야하는 시기가 온다.
그러면 아래에서 우리 프로그램에 메모리에
어떻게 접근하는지 한번 알아보자!!
JAVA 메모리
자바에서 작성한 프로그램이
메모리에 어떻게 적재되는지에 대한 간단한 그림이다.
1. 실행과정
*.java(Source)를 javac로 컴파일하여
*.class(Byte Code)로 실행파일을 만들면
Class Loader가 JVM의 메모리 영역 Runtime Data Area로 로딩시킨다.
2. Runtime Data Area
1) 메소드/스태틱 영역(Method/Static Area)
JVM이 시작될 때 생성되는 공간으로 바이트코드가 이 영역에 저장된다.
클래스 정보, 변수 정보, static으로 선언한 변수가 저장하고
모든 스레드가 공유한다.
2) 힙 영역(Heap Area)
new 연산을 통해 동적으로 생성된 인스턴스 변수(클래스 객체, 배열, 참조 자료형)가
저장되는 영역으로 가비지 콜렉터(GC)가 정리하기 전 까지는 힙 영역에 남아있고
모든 스레드가 공유
3) 스택 영역(Stack Area)
지역변수, 메서드의 매개변수, 임시적으로 사용되는
변수, 메서드의 정보가 이 영역에 저장된다.
해당 메서드의 호출이 종료되면 선언된 변수들은 사라진다.
(금방 사용되거 끝나는 데이터가 저장되는 영역)
Person p = new Person("LEE", 20); 일 때,
참조변수 p는 Stack영역,
객체 Person("LEE", 20)은 Heap영역에 저장되고
힙 영역에 저장된 데이터의 주소를 스택 영역에 저장한다.
4) PC Register
스레드가 시작될 때 생성되며, 현재 수행중인 JVM의 명령어 주소를 저장하고
스레드가 어떠 부분을 어떤 명령어로 수행할지 저장하는 공간이다.
5) Native Method Stack
JAVA가 아닌 다른 언어로 작성되 코드를 저장하기 위한 공간이다.
JVM에 대해서 궁금하다면 아래 블로그에서 한 번 알아보자!!!
'JAVA' 카테고리의 다른 글
[JAVA] 자바를 공부해야하는 이유 (0) | 2023.02.06 |
---|---|
[JAVA] 자바가 내 컴퓨터에서 작동할 수 있는 이유 (JDK, JRE, JVM) (0) | 2023.02.06 |
[JAVA] 인텔리제이 커뮤니티(IntelliJ Community)에서 스프링부트(SpringBoot) 간단하게 만드는 방법 (0) | 2023.01.24 |
[JAVA] 자바 스프링(Java Spring)와 자바 스프링부트(Java SpringBoot)의 차이점 (0) | 2023.01.24 |
[JAVA] 템플릿 엔진에 대한 설명과 JSP, Thymeleaf과의 관계 (0) | 2023.01.24 |