자바 프로그램을 실행하게 되면 JVM(Java Virtual Machine)은 OS로부터 메모리를 할당 받는다.
할당 받은 메모리를 자바 프로그램에 맞게 여러 개의 영역으로 나누어 사용하게 된다.
각 영역은 목적에 맞게 사용되고, 어플리케이션의 성능에 영향을 미친다.
같은 기능을 하는 어플리케이션이더라도, 메모리 관리에 따라 성능에 ㅏ이가 생긴다는 이야기다. 메로리를 관리하지 않고 구성하게 된다면 StackOverFlow가 발생하여 어플리케이션이 종료될 수도 있다는 말이다.
혹은 어플리케이션의 속도가 크게 저하될 수 있다.
JVM의 메모리는 크게 3가지로 이루어져 있다.
메모리 영역에 올라가는 것들 중 이해하기 가장 쉬운 것이 변수에 대한 부분이다. 또한 처음 공부하는 경우, 변수 종류에 대해 굉장한 혼돈이 오기 마련이다. 변수 종류를 간단하게 이해하고 메모리 영역에 대해 접근하면 이해하기가 쉬울 것이다.
public class Variable {
public static int age = 20; // 클래스 변수(전역 변수)
int height = 60; // 인스턴스 변수(전역 변수)
public static void main(String[] args) { // 매개변수(파라미터)
int size = 50; // 지역변수
}
}
변수 종류 | 선언 위치 | 설명 | 생성 시기 | 소멸 시기 | 저장 메모리 |
---|---|---|---|---|---|
클래스 변수(Static variable) | 클래스 영역 | static 키워드가 붙고 여러 객체에서 공통으로 사용할 때 사용 | 클래스가 메모리에 올라갈 때 | 프로그램 종료 시 | Static |
인스턴스 변수(Instance variable) | 클래스 영역 | 클래스 영역에서 static이 아닌 변수 | 인스턴스가 생성될 때 | 인스턴스 소멸 시 | Heap |
지역 변수(Local variable) | 메서드 영역 | 메서드 내부에서 선언된다. 초기 값을 지정해야 사용가능 | 블록 내에서 변수의 선언문이 실행될 때 | 블록을 벗어날 때 | Stack |
클래스 변수, 인스턴스 변수는 - 전역 변수(global variable), 멤버 변수(member variable), 필드 (field)라고 하며, 셋 다 같은 뜻이다.
Field(필드) = 클래스 영역에 있는 변수를 말한다.
Ex) 필드 안에 전역 변수 = 전역 변수 안에 전역 변수)
메서드 내부에 있는 변수를 지역 변수라고 한다.