자바의 데이터 타입 (JAVA Data Type)

  • 크게 기본 타입(primitive type)과 참조 타입(reference type)으로 분류한다.
  • 기본 타입은 실제 값을 변수 안에 저장한다.
  • 참조 타입인 배열, 열거, 클래스, 인터페이스를 이용해서 선언된 변수는 메모리의 번지를 값으로 갖는다.
  • 번지를 통해 객체를 참조하기 때문에 참조 타입이라고 한다.

[Example] 기본 타입 변수와 참조 타입 변수 선언

  • int 와 double 로 선언된 변수 age 와 price
  • String 클래스로 선언된 name, hobby
1
2
3
4
5
6
//기본 타입 변수
int age = 25;
double price = 100.5;
//참조 타입 변수 
String name = "홍길동";
String hobby = "게임";

변수의 종류

  • 인스턴스 변수나 정적 변수는 Thread 가 공유할 수 있다.
  • 메서드 내의 로컬 변수는 Thread Stack 에서 운용되므로 다른 Thread 와 공유할 수 없다.
  1. Primitive Type 변수: 기본자료형(int, double, boolean 등)으로 선언된 변수
  2. Reference Type 변수: 객체, 클래스, 배열, 열거, 인터페이스로 선언된 변수
  3. Instance Variable (인스턴스 변수): 클래스 안에서 선언되며, 객체마다 각각 가지는 변수
  4. Static Variable (정적 변수): 클래스 안에서 static으로 선언된 변수를 말하며, 클래스 당 하나만 존재한다.
  5. Local Variable (지역 변수): 메소드나 생성자 안에서 선언되며, 메소드가 호출될 때마다 생성된다.
    그리고 변수 선언 시에는 접근제한자로 public, private, protected, default를 사용 할 수 있다.

JVM(Java Virtual Machine) 메모리 영역 구조

출처: https://www.devkuma.com/docs/jvm/memory-structure

  1. Method Area: 클래스 로더가 로드한 클래스의 정보(메소드, 필드 등)를 저장하는 공간
  2. Heap: 인스턴스를 생성하는 공간, Garbage Collector가 관리
  3. Stack: 메소드가 호출될 때마다 생성되는 공간, 메소드가 종료되면 사라짐.
  4. PC Register: 현재 수행중인 명령어의 주소를 저장
  5. Native Method Stack: 자바 코드가 아닌, 운영체제의 네이티브 코드를 실행할 때 사용되는 공간.

Method 영역

  • 메소드 영역은 JVM 이 시작할 때 생성되고 모든 스레드가 공유하는 영역이다.
  • 클래스별로 런타임 상수풀(runtime constant pool), 필드 데이터(field data), 메소드 데이터(method data), 메소드 코드, 생성자 코드(constructor code) 등을 분류해서 저장한다.

Heap 영역

  • 힙 영역은 객체와 배열이 생성되는 영역이다.
  • 생성된 객체와 배열은 스택 영역의 변수나 다른 객체 필드에서 참조한다.
  • 참조하는 변수나 필드가 없다면, 의미없는 객체로 분류되어 쓰레기로 취급하고 Garbage Collector를 실행시켜 자동으로 제거한다.
  • 인스턴스 생성 시 인스턴스가 저장되는 공간이다.
    • 인스턴스 : 참조 여부에 따라 Garbage Collector 에 의해 수집 및 소멸

Stack 영역

  • 각 스레드마다 하나씩 존재하며 스레드가 시작될 때 할당된다.
  • JVM 스택은 메소드를 호출할 때마다 프레임(frame)을 추가(push)하고 메소드가 종료되면 해당 프레임을 제거(pop)하는 동작을 수행한다.
  • 로컬변수/매개변수, 파라미터, 함수 복귀 주소 등을 저장한다.
  • 프레임 내부에는 로컬 변수 스택이 있어 기본 타입 변수와 참조 타입 변수가 push 되거나 pop 된다.
    • 스택 내 변수 생성 : 최초로 값 저장(초기화) 될 때
    • 스택 내 변수 제거 : 블록을 벗어날 때

변수의 메모리 영역

  1. Primitive Type 변수: Stack 메모리 영역에서 사용한다.
  2. Reference Type 변수: Stack 메모리 영역에서 참조를 저장하고, Heap 메모리 영역에서 실제 객체를 저장한다.
  3. Instance Variable: Heap 메모리 영역에서 사용. 객체마다 각각 가지는 변수이다.
  4. Static Variable: Method Area 메모리 영역에서 사용. 클래스 당 하나만 존재한다.
  5. Local Variable: Stack 메모리 영역에서 사용. 메소드가 호출될 때마다 생성된다.

JVM은 자동으로 Garbage Collector를 이용해 Heap 메모리 영역에서 필요 없는 객체를 제거하는데 이를 통해 Stack 메모리 영역의 공간도 자동으로 관리가 가능하다.

참조

이것이 자바다 Chapter 05 참조 타입

🌞 정보 : 공부 기록용 블로그입니다. 오타나 내용 오류가 있을 경우 알려주시면 감사하겠습니다.

태그:

카테고리:

업데이트:

댓글남기기