자바(java) 메모리구조
자바(java) 메모리구조
Static area
가장 바탕이 되는 메모리 구조
식당으로 치면 조리하는 곳 테이블 같은 기본적인 것들
자바 3가지 파일 중 field, constructor, method 중 field 부분에서 선언된 변수인 전역변수와 Static가 붙은 정적 멤버 변수를 Static 영역에 저장한다
(field에서 선언된 변수인 전역변수를 인스턴스( 변수라고 부른다)
Static가 영역에 있는 데이터는 프로그램 시작과 종료가 될 때까지 메모리에 남게 된다 (어디서든 사용가능하다)
너무 많이 사용하면 메모리를 너무 많이 잡아 먹는다 - 고로, 적당히 써라
Stack area
쉽게 말해, 새로 만들어지는 변수라고 생각하면 된다
메소드가 호출될 때 메모리가 할당되고 메소드 종료시 메모리 해제된다
public static void method() {
int a = 5; a = 3;
}
method에서의 메소드가 호출 될 때 Stack에 int a 라는 메모리가 할당되고 method 종료됨
int a 값에 연속으로 넣으면 나중에 값이 덮어쓰기 됨
public static void main(String[] args) {
for(int i=0; i<5; i++){}
// System.out.println(i); 컴파일 에러
}
위와 같이 for문 안에 i를 정의하고 for문 안에서 출력하지 않고 나와서 하면 i라는 지역변수는 사라지기 때문에 i 출력 불가
Heap area
실제 데이터가 저장된 공간 - Heap 공간
실제 데이터를 Stack 영역에서 객체를 만들어 불러옴
힙 영역에는 참조 타입인 객체와 배열이 생성되는 영역
JVM은 쓰레기 수집기를 실행시켜 참조하는 변수나 필드가 없다면 자동으로 제거한다
댓글남기기