Java

자바의 메모리 영역과 가상 메서드

codewalker 2021. 4. 17. 18:16

자바의 변수들이 사용되는 메모리 영역

  • 지역 변수는 스택 영역
  • 지역 변수 중 참조 변수가 참조하는 인스턴스 변수는 힙 영역(동적 메모리 영역)
  • static 변수는 데이터 영역 (처음에 프로그램이 메모리에 로드될 때 생성되고 공유되어 사용되다가 프로그램이 업로드될 때 사라짐)

 

 

 

메서드는 어떻게 호출되고 실행되는가?

  • 자바는 모든 메서드가 가상 메서드
  • 메서드(함수)의 이름은 주소값을 나타냄
  • 메서드는 명령어의 set이고(Instruction Set), 프로그램이 로드되면 메서드 영역(코드 영역)에 명령어 set이 위치함
  • 해당 메서드가 호출되면 명령어 set이 있는 주소를 찾아 명령어가 실행됨
  • 이때 메서드에서 사용하는 변수들은 스택 메모리에 위치하게 됨
  • 따라서 다른 인스턴스라도 같은 메서드의 코드는 같으므로 같은 메서드가 호출됨
  • 인스턴스가 생성되면 변수는 힙 메모리에 따로 생성되지만, 메서드 명령어 set은 처음 한번만 로드됨

 

 

 

 

가상 메서드의 원리

  • 메서드가 호출되면 메서드 이름으로 바로 호출되는게 아니라, 메서드 이름이 가리키는 가상 테이블을 보고, 각 클래스가 가지고 있는 메서드 주소를 참조해서 호출함
  • 가상 메서드 테이블(Vitual Method Table)에서 해당 메서드에 대한 address를 가지고 있음
  • 재정의된 경우는 재정의된 메서드의 주소를 가리킴

 

 

'Java' 카테고리의 다른 글

자바의 내부 클래스  (0) 2021.05.05
자바 정렬 인터페이스, Comparable과 Comparator  (1) 2021.05.05
자바의 유용한 클래스 - Class 클래스  (0) 2021.04.28