이번에는 자바(JAVA)를 사용할 때 알아야 할 메모리 구조 및 특징에 대해 알아보자!!
자바 프로그램을 실행하면 JVM(자바 가상 머신)은 OS로부터 메모리를 할당 받고, 그 메모리를 용도에 따라 여러 영역으로 나누어 관리한다.
📌JVM이란??
- Java Virtual Machine의 약자로 자바 가상 머신을 뜻한다.
- Java는 OS에 종속적이지 않다는 특징이 있다. Java를 실행되기 위해서는 OS위에서 Java를 실행시켜줄 무언가가 필요하다. 그게 바로 JVM이다.
즉, 자바를 실행시켜주는 기능을 해주는 가상 기계이다.
이번 포스팅은 메모리 영역의 구조와 역할에 대해 알아보고 JVM은 나중에 따로 다뤄보도록 하자.
자바의 메모리 영역은 크게 3가지 영역으로 분류된다.
Method 영역, Stack 영역, Heap 영역
각각의 역할이 주어져 있으며 자세히 알아보자.
잠깐!🤚
메모리 영역을 알기 전에 자바에서 선언 위치에 따른 변수의 종류를 먼저 알아보도록 하자.
변수는 크게 네 종류로 변수의 선언된 위치에 따라 클래스변수, 인스턴스변수, 지역변수, 매개변수로 나뉜다.
public class Main {
public static voide main(String[] args) { // 매개 변수
int num = 999; // 지역 변수
}
}
public classs Counter {
private int state = 0 ; // 인스턴스 변수
public static int gage = 100; // 클래스 변수
public int get(){
return state;
}
}
| 변수명 | 선언위치 | 설명 |
|---|---|---|
| 클래스 변수 (class variable) | 클래스 영역 | - 클래스 영역에서 타입 앞에 static이 붙는 변수 - 객체를 공유하는 변수로 여러 객체에서 공통으로 사용하고 싶을 때 정의 |
| 인스턴스 변수 (instance variable) | 클래스 영역 | - 클래스 영역에서 static이 아닌 변수 - 개별적인 저장 공간으로 객체/인스턴스마다 다른 값 저장 가능 |
| 지역변수 (local variable) | 메서드 영역 | - 메서드 내에서 선언되고 메서드 수행이 끝나면 소멸되는 변수 -초기값을 지정한 후 사용할 수 있다. |
| 매개 변수 (parameter) | 메서드 영역 | - 메서드 호출 시 '전달하는 값'을 가지고 있는 인수 |
각 변수의 생성시기는 이렇다.
이처럼 자바의 메모리 공간은 클래스, 변수 등 다양한 모습으로 저장이 되며 각 공간에서 역할에 맞게 움직인다.
특히, 내가 좀 더 봐야할 부분은 힙 영역에 대한 개념인 것 같다. 스택 영역과의 차이와 GC에 의한 메모리 관리 등 메모리 영역에 관한 개념을 좀 더 채우면 더욱 효율적으로 사용할 수 있을 것 같다.