티스토리 뷰

Java

Java ( Stack Area 와 Heap Area )

범블루 2022. 4. 6. 21:36

Stack 영역과 Heap 영역의 차이를 간단히만 알아보겠다.

 

- Stack 영역

우리가 알고있는 기본데이터형 (원시타입 byte,short,int,long,float,double,char,boolean) 지역변수,매개변수 들이

저장되는 임시영역 과도 같다( 실행되고 종료되면 바로 소멸되기때문이다. )

즉.메소드가 호출되면 -> 그메소드의 변수를 준비하고 -> 메소드호출이 끝나면 준비되었던 변수들이 Stack Area 에서 삭제된다

 

 

- Heap 영역 (레퍼런스 타입,)

원시타입,클래스변수,클래스 제외한 데이터는 Heap Area 저장된다생각하면 된다.

( new 명령어를 통해 생성된 객체(인스턴스) ,배열 등 ) 

Stack 영역과 다르게 메소드 호출이 끝나도 바로 사라지지않고 Heap Area 에 남아있다.

그러다가 Hash Code 를 갖고있는 인스턴스 변수 가 더이상 사용되지않는다면 

쓰레기 데이터로 생각되어 가비지 컬렉터 에 의해서 제거되거나 ,JVM 종료시 할당된 메모리가 해제된다.

 

여기서 참조변수와 참조값에 대해 알아야한다.

참조변수 는 객체 화 될때 담긴그릇 이라면

참조값은 그 그릇위에 실제음식이라고 생각하면된다

 

 

참조변수는 객체생성될때 Stack 에 임시저장되는데  이때 Heap 영역에서  실제값을 찾을수있는 Hash Code 를 받아서

Stack 에서 임시 대기한다.

호출이 되면 Stack 에 저장된 참조변수가 Hash Code 를 통해 Heap 영역에 있는 실제 참조값에 접근할수있다.

다시 정리하자면 

객체생성할때 만들어진 참조변수를 사용하지않거나 삭제를하면

Stack 에 Hash코드를 담고있는 참조변수는 금방해지되어도 이미 Heap 영역에 저장된 참조값은 가비지컬렉터에 의해 메모리해지

당하거나 JVM 실행 종료 하기전까진 남아있다.