Java

Java / 자바 메모리 구조와 static

Dear-J 2025. 2. 22. 21:51

메서드 영역(Method Area)

프로그램을 실행하는데 필요한 공통 데이터 관리(프로그램의 모든 영역에서 공유)

 

클래스 정보 : 클래스의 실행 코드, 필드, 메서드와 생성자 코드등의 모든 실행 코드 존재

static 영역 : static 변수들을 보관

런타임 상수 풀 : 프로그램을 실행하는데 필요한 공통 리터럴 상수들 보관 

 

스택 영역(Stack Area)

자바 실행 시, 하나의 실행 스택 생성

각 스택 프레임은 지역변수, 중간 연산 결과, 메서드 호출 정보 등을 포함

 

스택 영역은 각 쓰레드 별로 하나의 실행 스택이 생성됨.

>>쓰레드 수 만큼 스택 영역이 생성됨

 

스택 프레임 : 스택 영역에 쌓이는 네모 박스가 하나의 스택 프레임

메서드를 호출할 때 마다 하나의 스택 프레임이 쌓이고 종료되면 제거됨

 

힙 영역(Heap Area)

객체와 배열이 생성되는 영역

가비지 컬렉션이 이루어지는 주요 영역


객체가 생성될 때, 인스턴스 변수에는 메모리가 할당되지만, 메서드에 대한 새로운 메모리 할당은 없음

>> 인스턴스의 메서드를 호출하면 메서드 영역에 있는 코드를 불러서 수행

 

static 변수(정적 변수, 클래스 변수)

static 키워드는 주로 멤버 변수와 메서드에 사용

static이 붙은 멤버 변수는 메서드 영역에서 관리

>> static이 붙은 멤버 변수는 인스턴스 영역에 생성되지 않음

 

static이 붙은 정적 변수에 접근하려면?

>> 클래스명 + . + 변수명

 

멤버 변수(필드)의 종류

인스턴스 변수 : static이 붙지 않은 멤버 변수

인스턴스를 생성해야 사용할 수 있고 인스턴스에 소속되어 있음

인스턴스를 만들 때 마다 새로 만들어짐

 

클래스 변수 : static이 붙은 멤버 변수

인스턴스와 무관하게 클래스에 바로 접근해서 사용 가능, 클래스 자체에 소속되어 있음

자바 프로그램을 시작할 때 딱 1개가 만들어짐

보통 여러곳에서 공유하는 목적으로 사용

 

static 메서드

정적 메서드는 객체 생성없이 클래스에 있는 메서드를 바로 호출 가능

하지만 언제나 사용할 수 있는 것은 x

 

static 메서드는 static만 사용 가능

 >>클래스 내부 기능을 사용할 떄, 정적 메서드는 static이 붙은 정적 메서드나 정적 변수만 사용 가능

반대로 모든 곳에서 static 호출 가능

 

정적 메서드가 인스턴스의 기능을 사용할 수 없는 이유?

>> 정적 메서드는 인스턴스 처럼 참조값의 개념이 없음

 

static import

정적 메서드를 사용할 때 해당 메서드를 자주 호출해야 한다면?

>> import static static2.DecoData.staticcall or *;

정적 변수에도 사용 가능

 

main() 메서드는 정적 메서드

 

 

'Java' 카테고리의 다른 글

Java / 상속  (0) 2025.02.23
Java / final  (0) 2025.02.22
Java / 접근 제어자  (0) 2025.02.21
Java / 패키지  (0) 2025.02.21
Java / 생성자  (0) 2025.02.21