본문 바로가기

Programming/JAVA

[ JAVA ] 기초 문법 2 - 참조 타입

# 1. Data Type

Data Type

자바의 데이터 타입(Data type)기본 타입(primitive type)참조 타입(reference type)으로 분류됩니다.

  • 기본 타입이란? 정수, 실수, 문자, 논리 리터럴을 저장하는 타입.
  • 참조 타입이란? 객체(Object)의 번지를 참조하는 타입으로 배열, 열거, 클래스, 인터페이스 타입을 말함.

 

# 2. 메모리 사용 영역

JVM이 사용하는 메모리 영역에 대하여 알아보기로 한다. 우선 JVM이 시작되면 JVM은 운영체제에서 할당받은 메모리 영역(Runtime Data Area)을 세부 영역으로 구분해서 사용한다.

 

  • 메소드(Method) 영역

메소드 영역에는 코드에서 사용되는 클래스(.class)들을 클래스 로더로 읽어 클래스별로 런타임 상수풀(runtime constant pool), 필드(field) 데이터, 메소드(method) 데이터, 메소드 코드, 생성자(constructor) 코드 등을 분류해서 저장한다.

메소드 영역은 JVM이 시작할 때 생성되고 **모든 스레드가 공유한다. 스레드란? 

 

  • 힙(Heap) 영역

힙 영역은 객체와 배열이 생성되는 영역이다. 힙 영역에서 생성된 객체와 배열은 JVM 스택 영역의 변수나 다른 객체의 필드에서 참조한다. 참조하는 변수나 필드가 없다면 의미 없는 객체가 되기 때문에 이것을 쓰레기로 취급하고 JVM은 쓰레기 수집기(Garbage Collector)를 실행시켜 쓰레기 객체를 힙 영역에서 자동으로 제거한다. 그렇기 때문에 개발자는 객체를 제거하기 위해 별도의 코드(소멸자)를 작성할 필요가 없다.

  • JVM 스택(Stack) 영역

JVM 스택 영역은 각 스레드마다 하나씩 존재하며 스레드가 시작될 때 할당된다. 일반 자바 프로그램에서 추가적으로 스레드를 생성하지 않았다면 main 스레드만 존재하므로 JVM 스택도 하나이다.

JVM 스택은 메소드를 호출할 때마다 프레임(Frame)을 추가(push)하고 메소드가 종료되면 해당 프레임을 제거(pop)하는 동작을 수행한다. 예외 발생 시 printStackTrace() 메소드로 보여주는 Stack Trace의 각 라인은 하나의 프레임을 표현한다.

cf) Process vs Thread

일반 스레드와 거의 차이가 없으며, JVM가 운영체제의 역할을 한다. 자바에는 프로세스가 존재하지 않고 스레드만 존재하며, 자바 스레드는 JVM에 의해 스케줄되는 실행 단위 코드 블록이다. Java 에서 필요한 부분만 정리했기 때문에, 프로세스와 스레드의 자세한 차이는 따로 정리하지 않았습니다. 더 필요하신 부분은 아래의 링크를 참조하세요!

process and thread image

 

reference

  1. 프로세스와 스레드 차이
  2. 이것이 자바다 138-180p, 신용권, 한빛미디어