ejyoo's 개발 노트

JVM 과 변수종류(인스턴스변수, 클래스 변수, 지역변수) 와 메서드 본문

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)

클래스의 인스턴스와 배열이 저장되는 공간이다. 프로그램 중 생성된 인스턴스는 모두 이곳에 저장된다. 인스턴스 변수도 생성된다.

 

'BackEnd > JSP_Servlet' 카테고리의 다른 글

Error Page 설정 방법  (0) 2021.06.04
JSP&Servlet -> web.xml 의 load-on-startup 기능  (0) 2021.06.02
톰캣 서버에 프로젝트 목록이 뜨지 않을 때.  (0) 2021.05.29
Tomcat 배포기준 ROOT  (0) 2021.05.28
File.separator  (0) 2021.05.27