[Java]::Remind - Java Memory

Gentlee's Self-Study Log·2023년 4월 20일
0

Java Reminder

목록 보기
2/19
post-thumbnail

Java Memory

JVM에는 3개의 메모리 영역이 있다
1. code영역
2. heap영역
3. stack영역

1. code 영역

클래스에 있는 모든것들을 메모리에 로딩할 때, 클래스 안에 있는 메서드들의 명령문들을 code 영역에 저장한다.
흔히 Method영역이라고도 불리며, 컴파일 된 소스파일이 실행될 때 JVM안에서 일어나는 과정이 포함된다.

test.java (컴파일)
-> test.class (실행)
-> Class Loader
-> Byte Code verifier
-> Interpreter / Just-In-Time compiler
-> Runtime System

2. heap 영역

new 명령문으로 만들어지는 인스턴스들이 사용하는 메모리 영역이다.
인스턴스 = 설계된 class를 new명령문으로 생성한 대상

heap영역에 저장되는 클래스의 멤버변수들은 만들어 질 때마다 자동으로 초기화된다.

3. stack 영역

지역변수들이 사용하는 메모리 영역이다.
메소드가 실행될 때 stack 영역안에 메모리가 생성되고
메소드가 종료될 때 stack 영역안에 메모리가 삭제된다.

* 참조변수

개발자들이 주로 접근할 수 있는 영역은 stack영역이다. 그러므로 heap영역에 있는 인스턴스들을 접근할 때는 참조변수를 사용한다.
참조변수 = heap 메모리의 주소값을 가지고 있는 변수

예제 코드

public void test(){
	
	Test t = new Test();
    
}

t라는 지역변수에 new로 생성된 Test()인스턴스에 대한 주소값을 저장시킨다.
호출 방법 : t.멤버변수 , t.메서드()

* static

static은 변수, 메서드 앞에 선언될 수 있다.
static이 선언된 변수, 메서드 들은 프로그램이 실행 되기 전에 이미 code 영역에 메모리가 생성된다.
static 변수들은 class 변수라고도 부를 수 있으며, static 메서드는 프로그램 실행 전 사용준비가 완료된 메서드라고 볼 수 있다.

profile
https://github.com/SamGentlee

0개의 댓글