BackEnd/JSP_Servlet
JVM 과 변수종류(인스턴스변수, 클래스 변수, 지역변수) 와 메서드
ejyoovV
2021. 6. 1. 22:01
Java.exe가 실행되면 (.class 실행)
자바 가상 머신(Java Virtual Machine, JVM)은 프로그램 수행에 필요한 메모리를 할당 받고, 이 메모리를 관리하게 된다.
Java에서 변수는 크게 전역변수, 지역변수로 구분되며
전역변수는 클래스 변수, 인스턴스 변수로 세분화된다.
변수의 종류를 결정짓는 요소는 변수가 어느 위치에 선언됐느냐에 따라 변하게된다.
변수의 종류 | 선언 위치 | 생성 시기 | 특징 | |
전역변수 =멤버변수 =필드 |
클래스 변수 (=Static변수) |
클래스 영역 | 클래스가 메모리에 올라갈 때 | - static 메모리에 생성 - 프로그램 실행시 생성, 종료시 소멸 - 변수의 초기화 지원(초기화 필요 없음) |
인스턴스 변수 (=객체변수) |
인스턴스가 생성되었을 때 | - heap 메모리에 생성 - GC에 의해 메모리 소멸 |
||
지역변수 | 클래스영역 이외의 영역 (메서드, 생성자, 초기화 블럭 내부) |
메소드 블럭 안에서 변수 선언문이 수행되었을때 |
- 메서드 수행시 메모리에 생성 - stack 메모리에 생성 - 초기화가 안되므로 초기화 후 사용가능 - 메소드 종료시 메모리에서 소멸 |
class Test {
int AAA; // 인스턴스 변수
static inst BBB; // 클래스 변수(또는 static 변수, 공유 변수)
void method(){
int CCC=0; // 지역변수
} // 메서드 영역
} // 메소드 포함 전체가 클래스 영역
메소드 영역 (Method area)
프로그램 실행 중 어떤 클래스가 사용되면, JVM은 해당 클래스의 클래스 파일 (.class) 파일을 읽어 클래스에 대한 정보를 저장한다. Class Variable도 함께 저장하는데 그것은 Static Variable과 같다. 어디서든 공유해 쓸 수 있는 변수를 의미한다.
호출 스택 (call stack)
메서드의 작업에 필요한 메모리 공간을 할당한다. 메서드가 호출되면 스택에 호출된 메서드를 위한 메모리가 할당되고, 이 메모리는 메서드의 연산의 중간 결과, 지역변수, 매개변수 등을 저장하는데 사용한다. 그리고 메서드의 작업을 마치면 메모리 공간을 반환한다.
힙 영역 (heap)
클래스의 인스턴스와 배열이 저장되는 공간이다. 프로그램 중 생성된 인스턴스는 모두 이곳에 저장된다. 인스턴스 변수도 생성된다.