티스토리 뷰

CS/JAVA

[JAVA] 메모리 구조

코딩가딩 2021. 6. 16. 23:14

 

메소드 영역

  • 클래스에 대한 정보와 함께 클래스 변수(static)가 저장되는 영역이다.
  • 메소드 영역의 데이터는 프로그램의 시작부터 종료될 때까지 메모리에 남아있다.
  • 따라서 전역변수를 무분별하게 많이 사용하면 메모리가 부족하게 될 수 있다.

 

힙 영역

  • JVM이 관리하는 프로그램 상에서 데이터를 저장하기 위해 런타임 시 동적으로 할당하여 사용하는 영역이다.
  • new 키워드로 생성된 객체와 배열이 저장된다.
  • 메소드 영역에 로드된 클래스의 객체만 생성이 가능하다.
  • 힙 영역에 생성된 객체와 배열은 스택 영역의 변수나 다른 객체의 필드에서 참조한다.
  • 참조하는 변수나 필드가 없다면 의미 없는 객체가 되어 Garbage Collector의 대상이 된다.
    -> Garbage Collector : 힙 영역에 생성된 객체 중 참조되지 않는 객체들을 탐색 후 제거하는 역할을 한다. 제거하는 타이밍은 정확히 알 수 없다.

 

스택 영역

  • 각 스레드마다 하나씩 존재하며 스레드가 시작될 때 할당된다.
  • 메소드를 호출할 때마다 프레임(Frame)을 추가(push)하고 메소드가 종료되면 해당 프레임을 제거(pop)하는 동작을 수행한다.
    후입선출(LIFO) 구조.
  • 기본형 변수는 스택 영역에 직접 값을 가지고 참조 변수는 힙 영역이나 메소드 영역의 객체의 주소를 가진다.

 

 

 

'CS > JAVA' 카테고리의 다른 글

[JAVA] Thread  (0) 2021.06.17
[JAVA] 변수의 종류  (0) 2021.06.16
[JAVA] 접근 제어 지시자  (0) 2021.06.16
[JAVA] Wrapper Class, Generic  (0) 2021.06.15
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/11   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
글 보관함