자바 - 자료형 종류, 메모리 구조

2023. 7. 1. 10:43자바

반응형

자료형 종류 크게 두가지로 나뉨

1) 기본 자료형

2) 참조 자료형

 

기본 자료형

1) 부울대수

- bolean (1바이트) 

2) 정수

- byte (1바이트)

- short (2바이트)

- int (4바이트)

- long (8바이트)

4) 실수

- float(4바이트)

- double(8바이트)

4) 문자

- char(2바이트)

 

참조 자료형

1) 배열

2) 클래스

3) 인터페이스

 

 

메모리에 소스가 로드될때까지의 과정

1) 소스코드(.java) 파일을 컴파일러가 바이트코드(.class) 파일로 변환한다.

2) 바이트코드로 변환된 파일을 JVM의 클래스 로더로 보낸다.

3) 클래스로더는 클래스 파일을 불러와서 메모리에 저장한다.

 

메모리 구조

1) Method area(Static area)

- JVM이 구동될 때 생성되며 모든 스레드가 공유하는 영역.

- 멤버변수(전역변수)의 이름, 데이터 타입, 접근제어자 저장

- 메서드의 이름, 리턴타입, 매개변수, 접근제어자 등의 정보 저장

- 상수풀(Rintime Constant Pool)은 Type의 상수 정보를 저장하는 pool이다. 각 상수로는 인덱스를 통해 접근 가능하다. 

- Static 변수(모든 객체가 공유할 수 있고, 객체 생성없이 접근가능) 저장

- 프록그램 시작 ~~~ 프로그램 종류까지 메모리에 있다.

- 장점 : 프로그램 종료까지 어디서든 사용 가능함

- 단점 : 무분별하게 사용하면 메모리가 부족

 

2) Heap

- 긴 생명주기를 갖는 데이터가 저장된다.

- 모든 메모리중 stack에 있는 데이터를 제외한 부분이라고 보면 됨

- 모든 Object 타입과 객체 배열이 Heap영역에 생성된다.

- 쓰래드의 개수와 상관없이 하나의 Heap영역만 존재한다.

- Heap 영역에 있는 Object들을 가리키는 레퍼런스 변수가 stack에 올라가면 해당 영역에 생성된 객체와 배열은 stack영역의 변수나 다른 객체의 필드에서 참조한다.

- 만약 참조하는 변수, 필드가 없으면 Garbage Collector를 실행하여 해당 객체를 제거한다.

- new 연산자로 생성된 객체가 저장된다

- 프로그램 실행 중 생성되는 모든 Object는 Heap영역에 동적으로 할당되고 Garbage Collector를 통해 메모리 반환된다.

- 참조형 데이터인 Object와 배열은 Heap 영역에 데이터가 저장되고 

 

2) Stack

- 각 쓰레드마다 자신만의 stack을 가진다. 즉, 쓰래드가 하나 생기면 그 쓰래드를 위한 stack도 생성된다. 각 쓰래드는 다른 쓰래드의 stack 영역에 접근 할 수 없다.

- 메서드가 호출될 시 할당되는 영역이다.

- 메서드 호출 시 메서드 내부의 지역변수가 stack 영역에 할당된다.primitive type( byte, short, int, float, double, boolean, char)와 같은 것들은 값이 그대로 stack에 들어가는데 참조타입의 데이터는 heap에 저장되고 stack에 존재하는 변수는 heap에 있는 데이터를 참조한다. 

정리해서 말하면 원시 타입 데이터는 값이 그대로 stack에 들어가는데 new 연산자로 생성된 인스턴스는 실제 데이터를 갖고 있는 Heap 영역의 참조값(메모리에 저장된 주소)을 stack에서 가지고 있어서 참조값을 통해 해당 인스턴스를 핸들할 수 있다.

 

 

 

 

반응형