카테고리 없음

메모리 구조와 static

공부처음하는사람 2024. 6. 5. 17:56

자바의 메모리 구조

자바 메모리 구조는 3가지의 영역이 있다.

 

- 메서드 영역 : 클래스 정보를 보관하는 영역. 프로그램의 모든 영역에서 공유한다.

- 스택 영역 : 실제 프로그램이 실행되는 영역. 메서드를 실행할 때 마다 하나씩 쌓인다.

- 힙 영역 :  객체(인스턴스)와 배열이 생성되는 영역. new 명령어를 사용하면 이 영역을 사용한다. (힙 영역에서 GC가 작동한다)

 

스택(Stack)과 큐(Que)

- 스택 (후입선출, LIFO)

 

 

- 큐 (선입선출, FIFO)

 

이런 자료구조는 각자 필요한 영역이 있다. 선착순 이벤트를 하는 경우라면 큐 자료구조를 사용해야 한다.

 

스택 영역

- 스택영역에 메서드 호출과 지역변수를 관리한다.

- 메서드를 계속해서 호출하면 스택 프레임이 계속 쌓인다.

- 지역변수 (매개변수 포함)는 스택 영역에서 관리한다.

- 스택 프레임이 종료되면 지역변수도 제거된다.

- 스택 프레임이 모두 제거되면 프로그램도 종료된다. (메인메서드가 가장먼저 실행되니까)

 

 

Static 변수

- 필드의 종류

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

static이 붙지 않은 멤버 변수는 인스턴스를 생성해야 사용할 수 있고, 인스턴스에 소속되어 있다.

인스턴스 변수는 인스턴스를 만들 때 마다 새로 만들어진다.

 

2. 클래스 변수 : static이 붙은 멤버 변수 / (클래스 변수, 정적 변수, static 변수라고 불린다.)

클래스 변수는 자바 프로그램을 시작할 때 딱 1개가 만들어진다. 인스턴스와 다르게 여러곳에서 공유하는 목적으로 사용된다.

static이 붙은 변수는 인스턴스와 무관하게 클래스에 바로 접근해서 사용할 수 있다.

 

- 변수와 생명주기

1. 클래스 변수 : 클래스 변수는 메서드 영역의 static 영역에 보관된다. 프로그램 전체에서 공용으로 사용된다.
클래스 변수는 해당 클래스가 JVM에 로딩 되는 순간 생성된다. 그리고 종료될 때까지 유지된다.

변수 중 생명주기가 가장 길다.

 

2. 인스턴스 변수 : 인스턴스 변수는 힙 영역을 사용한다. 가비지 컬렉션이 발생하기 전까지 생존한다.

 

3. 지역 변수(매개변수 포함) : 메서드가 시작되면 스택에 보관되고, 종료되는 시점에 제거된다. 생존주기가 가장 짧다.

 

 

Static 메서드

Static 변수와 마찬가지로 클래스에 바로 접근해서 사용할 수 있다. 클래스 자체에 소속되어 있으므로 클래스 메서드라고 한다.

 

- 인스턴스를 통한 접근

ex) data3.staticCall( ) 을 사용하면 코드를 읽을 때 인스턴스 메서드에 접근하는 것 처럼 오해할 수 있으므로 권장하지 않는 방법이다.

 

- 클래스를 통한 접근

ex) DecoData.staticCall( ) 을 사용해 메서드에 접근하는것이 더욱 명확한 방법이다.

 

 


 

자바의 메모리구조와 static에 대해 학습했다.

객체지향의 원리와 이해 책에서 먼저 공부했던 내용이지만 그땐 자바를 몰랐던 상태여서 이해하기 조금 힘든 부분이 있었는데

자바를 공부하면서 메모리구조를 공부하니 조금 더 이해하기 쉬웠다.

자바 기초공부를 마치고 책을 한번 더 보면 확실하게 이해할 수 있을 것 같다