이롭게 현명하게

[JAVA] 데이터 타입 분류와 메모리 영역 본문

JAVA

[JAVA] 데이터 타입 분류와 메모리 영역

dev_y.h 2023. 4. 10. 18:19
728x90
반응형


 

목차

 

데이터 타입 분류

메모리 영역

 


 


[데이터 타입 분류]

참조 타입 : 객체의 번지를 참조하는 타입

참조 타입으로 선언되는 변수는 메모리의 번지를 값으로 갖는다.

 

기본 타입 변수는 스택 영역에 생성되고 객체는 힙 영역에 생성된다.

// 기본 타입 변수 //
int age = 15;
double PI = 3.14

// 참조 타입 변수 //
String name = "홍길동"
String hooby = "독서"

 

변수 age와 PI는 직접 값을 저장하고 있다.

하지만 String 변수인 name과 hobby는 힙 영역의 String 객체 주소 값을 가지고 있다.

주소를 통해 객체를 참조한다는 뜻에서 String 클래스 변수를 참조 타입 변수라고 한다.

 

 


[메모리 사용 영역]

java.exe로 JVM이 시작되면 JVM은 운영체제에서 할당받은 메모리영역(Runtime Data Area)을 메서드영역, 힙영역, JVM 스택 영역으로 구분해서 사용한다.

 

<메서드 영역>

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

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

 

<힙(Heap) 영역>

  • 객체와 배열이 생성되는 영역
  • 힙 영역에 생성된 객체와 배열은 JVM 스택 영역의 변수나 다른 객체의 필드에서 참조한다.

참조하는 변수나 필드가 없다면 의미 없는 객체가 되기 때문에 이것을 쓰레기로 취급하고 JVM은 쓰레기 수집기(Garbage Collector)를 실행시켜 쓰레기 객체를 힙 영역에서 자동으로 제거한다.

 

<JVM 스택(Stack) 영역>

각 스레드마다 하나씩 존재하며 스레드가 시작될 때 할당된다.

자바 프로그램에서 추가적으로 스레드를 생성하지 않았다면 main 스레드만 존재하므로 JVM 스택도 하나이다.

메서드를 호출할 때마다 프레임(Frame)을 추가(push)하고 메서드가 종료되면 해당 프레임을 제거(pop) 하는 동작을 수해한다.

기본 타입 변수와 참조 타입 변수가 추가되면 push 하고 제거되면 pop 한다.

변수는 선언된 블록 안에서만 스택에 존재하고 블록을 벗어나면 스택에서 제거된다.

선언된 변수는 실행 순서에 따라서 스택에 생성되고 소멸된다.

 

 

char v1 = 'A'; // 1번

if(v1 == 'A'){// 2번
	int v2 = 100;
    double v3 = 3.14;
}

boolean v4 = true;// 3번
코드 스택
char v1 = 'A';
if(){
   int v2 =  100;
   double v3 = 3.14;
}



이때 v2와 v3는 if 블록 내부가 실행되고 있을 때 만 스택 영역에 존재한다.
실행흐름이 if 블록을 빠져나가면 소멸된다.
if 블록을 빠져나감
boolean v4 = true;

 

 

 

 

 

[JAVA] 객체 지향 프로그래밍

목차 객체란? 객체의 상호작용 객체 간의 관계 객체 지향 프로그래밍의 특징 [정리] 캡슐화 상속 다형성 1. 캡슐화 : 객체를 캡슐로 싸서 내부를 볼 수 없게 하듯이 객체를 외부의 접근으로부터

devyihyun.tistory.com

 


잘못된 정보는 댓글에 남겨주시면 감사하겠습니다!😊

댓글과 좋아요는 큰 힘이 됩니다!

 

 

728x90
반응형

'JAVA' 카테고리의 다른 글

[JAVA] 자바 객체와 클래스  (2) 2023.04.12
[JAVA] 객체 지향 프로그래밍  (0) 2023.04.11
[JAVA] MySQL 이클립스 연동하기  (0) 2023.01.25
[JAVA] UDP 통신  (0) 2023.01.19
[JAVA] 자바 서버생성 단계  (0) 2023.01.18
Comments