이숭간 공부기록

자바의 메모리 구조 본문

공부공부/Java

자바의 메모리 구조

이숭간 2020. 11. 27. 01:44
728x90

프로그램이 실행되면 프로세스의 형태로 메모리에 로드되고 이를 cpu가 실행함

 

프로그램의 구동을 위해서는 운영체제가 메모레 (RAM)에 공간을 할당하고 이 공간에 프로세스가 로드되어 프로그램이 실행됨

 

메모리공간은 크게 

1. 스태틱영역

2. 스택영역

3. 힙 영역 으로 나뉘고 데이터 타입에 따라서 해당공간에 할당됨

 

// 먼저 잠깐 변수정리!

선언위치에 따른 분류 - 멤버변수 / 지역변수

멤버변수 : 클래스변수(인스턴수 변수앞에 static,) + 인스턴스변수( 필드내에 선언, 인스턴스 생성시 만들어짐 )

지역변수 : 메소드 내에서 선언되는 변수 

 

데이터 타입에따른 분류 - 기본형변수 / 참조변수

기본형변수 : 자료의 실제값을 저장 ( 8개 타입 ) 

참조변수 : 값이 저장되어있는 주소값을 갖는다  ( string, 배열, 열거, 클래스, 인터페이스 등등, 사용자가 만들어낸 클래스타입만큼 즉 무한대) 

 

1. 스태틱영역 : 필드부분에서 선언된 변수( 전역변수 = 인스턴스 변수) 와 static이 붙은 변수 ( 정적멤버변수 = 클래스 변수 )가 스태틱 영역에 데이터를 저장함. 프로그램의 시작과 종료까지 계속 메모리에 남아있음 

2. 스택영역 : 메소드 내에서 정의하는 지역변수의 데이터값이 저장되는 공간 , 메소드가 호출될때 메모리에 할당되고 종료되면 메모리가 해제됨 ( LIFO의 형태를 갖는다 ) 

또한 참조타입의 변수는 스택영역에서 생성되는데 이때 값이 아니라 힙 영역에 있는 해당 주소값을 갖는다!!

문자열의 경우 리터럴로 생성된 객체는 동일한 주소를 참조하지만, new연산자로 객체를 새로 생성할경우 같은 문자열이라도 다른 주소를 참조함

 

3. 힙메모리영역 : 참조의 데이터 타입을 갖는 객체, 배열은 힙영역에 데이터가 저장됨. 이때 변수는 스택공간에서 실제 데이터가 저장된 힙 영역의 참조값을 new연산자를 통해 리턴받는다!!

즉, 실제 데이터를 갖고있는 힙 영역의 참조값을 스택영역의 객체가 갖고있다. 

'공부공부 > Java' 카테고리의 다른 글

[Java] Wrapper class란?  (0) 2021.07.13
[Java] Optional이란?  (1) 2021.05.24
[Lombok] @RequiredArgsConstructor / @NoArgsConstructor / @AllArgsConstructor  (0) 2021.05.22
java에서 스레드 생성  (0) 2020.11.29
7/30  (2) 2020.07.30