JAVA 19(1) 메모리 모델

2021. 8. 5. 13:13·Programming/Java

자바의 메모리 모델

운영체제 관점에서 JVM도 하나의 프로그램이다. 운영체제 입장에서 자바 프로그램과 JVM 둘 다 메모리 공간을 할당해야 한다. 따라서, 자바 프로그램이 2개 실행되면, JVM도 2개 실행된다. 하나의 JVM은 하나의 자바 프로그램을 실행시킨다. 

 

JVM은 메모리 공간 활용의 효율성을 높이기 위해 메모리 공간을 3개의 영역으로 구분한다. 

 

메소드 영역

- 메소드 바이트 코드(.java -> .class), static 변수를 저장한다.
- 한번 저장(기록)하면 프로그램이 종료될 때까지 유지가 된다.

 

스택 영역

- 지역변수, 매개변수
- 이 영역에 저장된 변수는 해당 변수가 선언된 메소드 종료 시 소멸된다.

 

힙 영역

- 인스턴스

 

힙과 스택을 구분하는 이유는? 

한 인스턴스 X를 두 참조변수 x, y가 참조한다 가정해보자. x를 지웠다고 해서 인스턴스 X도 지워지면 어떤 문제가 발생할까? y는 존재하지만 x를 지우면서 X도 지웠으므로 y가 참조하는 인스턴스가 의도치 않게 없어진게 될 것이다. 이와 같은 이유로 스택과 힙을 구분해주는 것이다. 인스턴스가 아무에게도 참조되지 않았을 때 비로소 지워야 한다. 다행히도 JVM이 힙 영역을 스캔하면서 해당 인스턴스를 참조하는 변수가 있는지 확인하고, 아무도 참조하지 않았으면 인스턴스를 지운다. 이러한 액션을 가비지 컬렉션(garbage collection)이라 한다. 따라서, 힙 영역을 가비지 컬렉션 영역이이라고 한다. 

 

인스턴스는 언제 소멸시킬까?
- 누구도 참조하지 않았을 때(가비지가 되었을 때)
- 가비지를 모아서 버리는 액션을 JVM이 해준다. 

 

 

 

'Programming > Java' 카테고리의 다른 글

JAVA 19(3) equals 메소드  (0) 2021.08.05
JAVA 19(2) Object 클래스  (0) 2021.08.05
JAVA 18(2) 예외 클래스 Throwable  (0) 2021.08.05
JAVA 18(1) 예외처리의 기본  (0) 2021.08.05
JAVA 17(3) 인터페이스의 static 메소드  (0) 2021.08.04
'Programming/Java' 카테고리의 다른 글
  • JAVA 19(3) equals 메소드
  • JAVA 19(2) Object 클래스
  • JAVA 18(2) 예외 클래스 Throwable
  • JAVA 18(1) 예외처리의 기본
사랑우주인
사랑우주인
  • 사랑우주인
    lovelyAlien
    사랑우주인
  • 전체
    오늘
    어제
  • 글쓰기
    관리
    • 분류 전체보기 (209)
      • Programming (4)
        • Spring (28)
        • Java (46)
        • JPA (2)
        • 디자인 패턴 (5)
        • 개발&아키텍처 (0)
      • Network (14)
      • OS (19)
      • Database (1)
      • Kubernetes (0)
      • Kafka (2)
      • Algorithm (49)
        • BaekJoon (1)
        • Programmers (19)
        • Algorithm (5)
        • Socar (2)
        • LeetCode (19)
      • Interview (2)
      • Issues (2)
      • DotJoin (1)
      • Git (4)
      • 독서 (3)
      • 끄적끄적 (1)
      • 외부활동 (26)
        • 항해플러스 (2)
        • JSCODE 네트워크 (19)
        • JSCODE 자바 (5)
      • SQL (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • GitHub
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Reorder List
    algorithm
    AuthenticationSuccessHandler
    @JsonProperty
    LinkedList
    fcfs
    Process
    추상화 클래스
    clone graph
    Thread
    socar
    디자인 패턴
    wildcards
    준영속 엔티티
    트랜잭션
    lower bounded wildcards
    runner 기법
    제네릭
    pacific atlantic water flow
    BFS
    JSCode
    @JsonNaming
    Climbing Stairs
    운영체제
    rotting oranges
    Oauth2
    RR
    Generic
    OS
    minimum number of arrows to burst balloons
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.1
사랑우주인
JAVA 19(1) 메모리 모델
상단으로

티스토리툴바