자바 가상 컴퓨터 메모리 영역 모델

먼저 자바 가 실 행 될 때의 데이터 영역 을 살 펴 보 겠 습 니 다.자바 가상 머 신 은 자바 프로그램 을 실행 하 는 과정 에서 관리 하 는 메모리 를 여러 개의 서로 다른 데이터 영역 으로 나 눌 것 입 니 다.이 구역 들 은 모두 각자 의 용도 가 있 고 각자 의 생 성 과 소각 시간 이 있 습 니 다.일부 지역 은 가상 컴퓨터 프로 세 스 가 시 작 됨 에 따라 존재 하 며,일부 지역 은 사용자 스 레 드 의 시작 과 끝 에 의존 하여 구축 되 고 소각 된다.
자바 가상 컴퓨터 가 실 행 될 때의 데이터 영역 을 살 펴 보 겠 습 니 다.

이 그림 을 결합 하여 각 데이터 구역 의 특징 을 하나씩 분석 해 보 겠 습 니 다.
1.프로그램 카운터
프로그램 계수 기 는 현재 스 레 드 에서 실행 되 는 바이트 코드 의 줄 표시 기로 볼 수 있 는 작은 메모리 공간 입 니 다.
무슨 뜻 이 죠?우 리 는 CPU 의 계산 시간 을 각 스 레 드 에 나 누 어 주 는 것 을 알 고 있 습 니 다.(다시 말 하면 병행 이란 본질 적 으로 직렬 입 니 다)예 를 들 어 스 레 드 A 가 한 곳 에 실 행 됩 니 다.CPU 는 제어 권 을 스 레 드 B 에 게 주 었 습 니 다.그러면 스 레 드 A 가 CPU 의 자원 을 다시 얻 을 때 방금 실 행 된 곳 으로 어떻게 회복 합 니까?이것 이 바로 프로그램 카운터 가 해 야 할 일이 다!그것 은 스 레 드 A 가 방금 실 행 된 곳 을 찾 아 방금 실 행 된 것 을 계속 할 수 있 도록 도와 줄 수 있다.
스 레 드 전환 후 정확 한 실행 위치 로 회복 하기 위해 서 는 모든 스 레 드 에 독립 된 프로그램 카운터 가 필요 합 니 다.각 스 레 드 간 의 카운터 가 서로 영향 을 주지 않 고 독립 적 으로 저장 해 야 합 니 다.그래서 프로그램 계산 기 는 스 레 드 개인 입 니 다.
또한,프로그램 계수 기 는 자바 가상 컴퓨터 규범 에 OutOfmory Error 상황 을 규정 하지 않 은 유일한 구역 입 니 다.
2.자바 가상 컴퓨터 스 택
자바 가상 컴퓨터 스 택 이 차지 하 는 메모리 공간 은 바로 우리 가 평소에 말 하 는'스 택 메모리'이 고 스 레 드 가 개인 적 이 며 생명 주 기 는 스 레 드 와 같 습 니 다.가상 스 택 은 자바 방법 으로 실 행 된 메모리 모델 을 설명 합 니 다.모든 방법 이 실 행 될 때 스 택 프레임 을 만 들 고 국부 변수 표(기본 데이터 형식,대상 의 참조 와 returnAddress 형식),조작 스 택,동적 링크,방법 출구 등 정 보 를 저장 합 니 다.
부분 변수 표 에 필요 한 메모리 공간 은 컴 파일 기간 에 분 배 를 완성 합 니 다.한 방법 에 들 어 갈 때 이 방법 은 스 택 프레임 에서 얼마나 큰 부분 변수 공간 을 분배 해 야 하 는 지 완전히 확정 되 고 방법 이 실행 되 는 동안 부분 변수 표 의 크기 를 바 꾸 지 않 습 니 다.
모든 방법 이 실 행 될 때 까지 호출 되 고 하나의 스 택 프레임 이 가상 스 택 에서 스 택 에서 스 택 으로 들 어 가 는 과정 에 대응 합 니 다.자바 가상 머 신 스 택 에 대해 서 는 두 가지 상황 이 있 습 니 다.
  • 스 레 드 가 요청 한 스 택 깊이 가 가상 컴퓨터 가 허용 하 는 깊이 보다 크 면 StackOverFlowError 이상 을 던 집 니 다
  • 4.567917.가상 컴퓨터 스 택 이 동적 으로 확장 되 었 을 때 충분 한 메모 리 를 신청 하지 못 하면 OutOf Memory Error 이상 을 던 집 니 다3.로 컬 방법 창고
    로 컬 방법 스 택 과 가상 컴퓨터 스 택 이 발휘 하 는 역할 은 매우 비슷 하 다.이들 의 차 이 는 주로 가상 컴퓨터 스 택 은 가상 컴퓨터 를 위 한 자바 방법(즉 바이트 코드)서비스 이 고 로 컬 방법 스 택 은 가상 컴퓨터 에 사용 되 는 Native 방법 서비스 이다.
    가상 컴퓨터 스 택 과 유사 하 며 로 컬 방법 스 택 에서 도 StackOverFlowError 와 OutOf Memory Error 이상 을 던 집 니 다.
    4.자바 더미
    자바 더 미 는 자바 가상 컴퓨터 가 관리 하 는 메모리 중 가장 큰 것 이다.자바 는 메 인 메모리 에 쌓 여 있 습 니 다.모든 스 레 드 에 공 유 된 메모리 영역 입 니 다.JVM 이 생 성 되면 서 만 들 어 졌 습 니 다.메모리 의 유일한 목적 은 대상 인 스 턴 스 와 배열 을 저장 하 는 것 입 니 다.자바 더 미 는 GC 관리의 주요 구역 이기 도 하 다.
    자바 더 미 는 물리 적 으로 연속 메모리 가 필요 없 이 논리 적 으로 연속 하면 된다.메모리 가 인 스 턴 스 분 배 를 완료 하지 않 고 확장 할 수 없 을 때 OutOfmory Error 이상 을 던 집 니 다.
    5.방법 영역
    방법 구역 은 모든 라인 이 공유 하 는 메모리 구역 입 니 다.가상 컴퓨터 에 불 러 온 클래스 정보,상수,정적 변수,인 스 턴 트 컴 파일 러 가 컴 파일 한 코드 등 데 이 터 를 저장 하 는 데 사용 합 니 다.방법 구역 에 도 Non-heap(비 더미)라 는 이름 이 있 는데 자바 더미 와 구분 할 수 있 습 니 다.
    핫 스 팟 가상 기기 의 경우 방법 구역 이'영구 세대(Permancent Generation)'가 되 는 것 도 습관 이 되 지만 이 는 핫 스 팟 가상 기기 에 있어 다른 가상 기기 의 실현 에는 이런 개념 이 없다.상대 적 으로 쓰레기 수집 행 위 는 이 지역 에서 비교적 적 게 나타 나 지만 수집 하지 않 는 것 도 아니다.이 지역 의 메모리 회수 목 표 는 주로 상수 탱크 의 회수 와 유형 에 대한 마 운 트 해제 이다.
    자바 가상 컴퓨터 규범 에 따 르 면 방법 구역 이 메모리 배분 수 요 를 만족 시 키 지 못 할 경우 OutOfmory Error 이상 을 던 집 니 다.
    6.런 타임 풀
    운행 시 상 당량 탱크 는 방법 구역 에 속한다.Class 파일 에는 클래스 의 버 전,필드,방법,인터페이스 등 설명 정보 외 에 도 컴 파일 기간 에 생 성 된 각종 문자 상수 와 기호 인용 을 저장 하 는 데 사용 되 는 상수 표 가 있 습 니 다.이 부분 은 클래스 로 딩 후 방법 영역 에 들 어 가 는 런 타임 풀 에 저 장 됩 니 다(JDK 1.7 부터 상수 풀 은 메모리 로 옮 겨 졌 습 니 다).
    즉,이 부분 은 컴 파일 할 때 상수 탱크 정보 에 만 넣 었 을 뿐 불 러 올 때 가 되 어야 운행 시 상수 탱크 에 넣 을 수 있다 는 것 이다.운행 시 상수 지현 은 Class 파일 상수 탱크 에 귀 속 된 또 다른 중요 한 특징 은 동태 성 을 가 진 다 는 것 이다.자바 언어 는 상수 가 반드시 컴 파일 기간 만 발생 하 는 것 을 요구 하지 않 는 다.즉,Class 파일 에 상수 탱크 의 내용 을 미리 설정 해 야 방법 구역 의 운행 시 상수 탱크 에 들 어 갈 수 있 는 것 이 아니 라 운행 기간 에 새로운 상수 탱크 에 넣 을 수도 있다.이런 특성 을 개발 자 들 이 많이 이용 하 는 것 은 String 류 의 intern()방법 이다.
    방법 구역 이 메모리 분배 수 요 를 만족 시 킬 수 없 을 때 OutOfmory Error 이상 을 던 집 니 다.상수 탱크 는 방법 구역 에 속 하고 OutOfmory Error 이상 을 던 질 수 있 습 니 다.
    다음은 자바 메모리 영역 모델 에 대해 간단 한 정 리 를 하 겠 습 니 다.

    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기