자바

자바 참조타입 데이터 분류 타입과 메모리 사용영역

알통몬_ 2017. 3. 9. 10:24
반응형



안녕하세요 알통몬입니다.

공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^

 

데이터 타입에는 크게 기본 타입(정수, 실수, 문자, 논리 리터럴)과 참조 타입으로 분류됨.

참조 타입 : 번지를 참조하는 타입으로 배열, 열거, 클래스, 인터페이스 타입이 있습니다.


기본타입으로 선언된 변수와 참조 타입으로 선언된 변수의 차이는 저장되는 값에 있어요.

기본타입은 실제 값을 변수에 저장하지만, 참조타입은 메모리의 번지를 값으로 갖습니다.


 메모리 사용 영역

 JVM이 사용하는 메모리 영역에 대해 알아보겠습니다.

메모리 영역은 메소드영역(스테틱 영역), 스택 영역, 힙 영역으로 구분됩니다.


메소드 영역 : JVM이 시작할 때 생성되고 모든 스레드가 공유하는 영역

코드에서 사용되는 클래스(~.class)들을 클래스 로더로 읽어 클래스별로 런타임상수풀 ,필드/메소드 데이터, 메소드 코드 , 생성자 코드 등을 분류해서 저장합니다. 



힙 영역 : 객체와 배열이 생성되는 영역

 힙 영역에 생성된 객체와 배열은 JVM 스택 영역의 변수나 대른 객체의 필드에서 참조.


JVM 스택 영역 : 각 스레드마다 하니씩 존재하며 스레드가 시작될 때 할당

추가적으로 스레드를 생성하지 않았다면 main 스레드만 존재 => JVM 스택도 하나

JVM 스택은 메소드를 호출할 때마다 프레임을 추가(push)하고 

메소드가 종료되면 해당 프레임을 제거(pop)하는 동작을 수행.


기본 타입 변수는 스택 영역에 직접 값을 가지고 있지만, 

참조 타입 변수는 값이 아니라 힙 영역이나 메소드 영역의 객체 주소를 가집니다. 

배열 변수인 scores 는 스택 영역에 생성되지만

실제 10,20,30을 갖는 배열은 힙 영역에 생성됩니다. 자바에서 배열은 객체로 취급합니다.

int[] scores = [10,20,30];



반응형