Stack,Heap

6630 단어 JavaJava


객체는 설계도로 만든다.
자바에서 설계도는 클래스(class)이다.
클래스에는 객체를 생성하기 위한 필드와 메소드가 정의되어 있다.
클래스로부터 만들어진 객체를 해당 클래스의 인스턴스(instance)라고 한다.
클래스로부터 객체를 만드는 과정을 인스턴스화라고 한다.
하나의 클래스로부터 여러 개의 인스턴스(객체)를 만들 수 있다.

생성자의 역할은 인스턴스를 초기화하는 것임.


Stack area(스택 메모리 영역)
·함수가 호풀할 때 지역 변수들이 사용하는 메모리, 함수의 수행이 끝나면 자동으로 반환되는 메모리(소멸)
·LIFO(Last In First Out)의 구조를 갖고 변수에 새로운 데이터가 할당되면 이전 데이터는 지워진다.


Heap area(힙 메모리 영역)
·참조형(Reference Type)의 데이터 타입을 갖는 객체(인스턴스), 배열 등은 Heap 영역에 데이터가 저장된다. 이때 변수(객체, 객체변수, 참조변수)는 Stack 영역의 공간에서 실제 데이터가 저징된 Heap영역의 참조값(reference value, 해시코드/ 메모리에 저장된 주소를 연결해주는 값)을 new 연산자를 통해 리턴 받는다. 다시 말하면 실제 데이터를 갖고 있는 Heap 영역의 참조 값을 Stack영역의 객체가 갖고 있다. 이렇게 리턴 받은 참조 값을 갖고 있는 객체를 통해서만 해당 인스턴스를 핸들 할 수 있다.

public class HeapAreaEx01 {
	public static void main(String[] args) {
		int[] a = null; // int형 배열 선언 및 Stack 영역 공간 할당
		System.out.println(a); // 결과 : null
		a = new int[5]; // Heap 영역에 5개의 연속된 공간 할당 및 
		                // 변수 a에 참조값 할당
		System.out.println(a); // 결과 : @15db9742 (참조값)
	}
}
public class HeapAreaEx {
	public static void main(String[] args) {
		String str1 = new String("joker");
		String str2 = new String("joker");
		if(str1 == str2){
			System.out.println("같은 주소값");
		}else{
			System.out.println("다른 주소값");
		}
	}
}

new 연산자를 이용해서 생성하면 데이터는 Heap영역에 저장되고 str1과 str2는 참조 값을 리턴 받는다.


class A{}

public class HeapArea {
	public static void main(String[] args) {
		A a = null; // A타입의 a객체 선언 및 Stack 영역 공간 할당
		System.out.println(a); // 결과 : null
		a = new A(); // Heap 메모리에 공간 할당 및 객체(a)에 참조값 할당
		System.out.println(a); // 결과 : @15db9742
	}
}

Heap에 저장된 데이터가 더 이상 사용이 불필요하다면 메모리 관리를 위해 JVM(자바 가상 머신)에 의해 알아서 해제된다. 이러한 기능을 가비지컬렉션(GC,쓰레기수집)이라고 한다.

좋은 웹페이지 즐겨찾기