자바 에서 JVM 에서 데이터 와 관련 정 보 를 어떻게 액세스 하 는 지 상세 하 게 설명 합 니 다.

선언:
우 리 는 매일 자바 코드 를 작성 하고 컴 파일 하고 실행 합 니 다.많은 사람들 이 자바 소스 코드 파일(자바 접미사)이 자바 컴 파일 러 에 의 해 바이트 파일(class 접미사)로 컴 파일 될 것 이라는 것 을 알 고 있 으 며,JVM 의 클래스 로 더 가 각 종류의 바이트 파일 을 불 러 오고,불 러 온 후 JVM 실행 엔진 에 맡 깁 니 다.
그러면 전체 프로그램 이 실행 되 는 과정 에서 JVM 에서 데이터 와 관련 정 보 를 어떻게 액세스 합 니까?
사실 JVM 에 서 는 프로그램 이 실행 되 는 동안 필요 한 데이터 와 관련 정 보 를 한 공간 으로 저장 합 니 다.이 공간 은 보통 Runtime Data Area(실행 시 데이터 구역),즉 우리 가 흔히 말 하 는 JVM 메모리 라 고 합 니 다.
1.실행 할 때 데이터 영역 은 어떤 것 을 포함 합 니까?

의 규정 에 따라 실행 할 때 데이터 구역 은 보통 이 몇 가지 부분 을 포함한다.프로그램 카운터(Program Counter Register),자바 가상 컴퓨터 스 택(Java Vitual Machine Stack),로 컬 방법 스 택(Native Method Stack),방법 구역(Method Area),쌓 기(Heap)이다.
2.각 부분 에 저 장 된 정보 와 담당 기능
1.프로그램 카운터
이 메모리 영역 은 자바 가상 컴퓨터 규범 중 유일 하 게 OOM(OutOf Memory Error)상황 을 규정 하지 않 은 영역 입 니 다.이것 은 이 지역 의 가장 큰 특징 중 하나 입 니 다.이것 은 프로그램 카운터 에 저 장 된 데이터 가 차지 하 는 공간의 크기 가 프로그램의 실행 에 따라 달라 지지 않 기 때문에 프로그램 카운터 에 메모리 넘 침 현상(OutOf Memory)이 발생 하지 않 습 니 다.
이 영역 은 현재 실행 중인 가상 컴퓨터 바이트 명령 주소,즉 현재 스 레 드 에서 실 행 된 바이트 코드 를 기록 하 는 줄 표시 기 입 니 다.
JVM 은 모든 스 레 드 에 독립 된 프로그램 카운터,카운터 간 에 서로 영향 을 주지 않 으 며 스 레 드 를 통 해 돌아 가면 서 프로세서 실행 시간 을 분배 하여 JVM 의 다 중 스 레 드 를 실현 합 니 다.그러나 스 레 드 가 Native 방법 을 실 행 했 을 때 이 카운터 의 값 은 undefined 입 니 다.
2.자바 가상 컴퓨터 스 택
프로그램 카운터 와 같은 것 은 자바 가상 컴퓨터 스 택 은 스 레 드 개인 이 고 수명 주기 와 스 레 드 가 같 습 니 다.가상 컴퓨터 스 택 은 자바 방법 으로 실 행 된 메모리 모델 을 묘사 합 니 다.모든 방법 이 실 행 될 때 스 택 프레임 을 만 들 고 국부 변수 표,조작 스 택,동적 링크,방법 출구 등 정 보 를 저장 합 니 다.모든 방법 은 호출 에서 실행 이 완료 되 는 과정 까지 하나의 스 택 프레임 이 가상 컴퓨터 에서 스 택 에 들 어가 서 스 택 을 나 오 는 과정 에 대응 합 니 다.그 중에서 64 비트 길이 의 long 과 double 형식의 데 이 터 는 2 개의 부분 변수 공간 을 차지 하고 나머지 데이터 형식 은 1 개 만 차지한다.
여기 서 이해 해 야 할 것 은 왜 스 택 이라는 구 조 를 사용 해 야 하 는 지 하 는 것 입 니 다.예 를 들 어 A 방법 에서 B 방법 을 호출 했 습 니 다.가상 컴퓨터 에서 먼저 A 방법의 스 택 프레임 을 가상 컴퓨터 스 택 에 들 어가 서 실 행 했 습 니 다.B 방법 을 호출 하 는 문 구 를 실 행 했 을 때 B 스 택 프레임 을 들 어가 게 했 습 니 다.실 행 된 후에 B 스 택 프레임 은 스 택 에서 나 오고 A 스 택 은 계속 실 행 했 습 니 다.여기 서 주의 하 는 것 은 재 귀 하 는 방법 이 너무 깊 으 면 다음 두 가지 이상 을 던 지기 쉬 우 므 로 재 귀 는 쓰기 편 하지만 성능 이 떨 어 지고 이상 을 던 지기 쉽다 는 것 이다.
자바 가상 컴퓨터 규범 에서 이 지역 에 대해 두 가지 이상 상황 을 규정 하 였 다.
  • 스 레 드 요청 스 택 의 깊이 가 가상 컴퓨터 가 허용 하 는 스 택 의 깊이 보다 크 면 Stack Overflow Error
  • 를 던 집 니 다.
  • 가상 컴퓨터 스 택 이 동적 으로 확장 되 고 확장 할 수 있 을 때 충분 한 메모리 신청 을 하지 못 하면 OutOfmory Error
  • 를 던 집 니 다.
    3.로 컬 방법 스 택
    가상 컴퓨터 스 택 과 비슷 한 역할 을 합 니 다.가상 컴퓨터 스 택 은 가상 컴퓨터 에 자바 방법 을 실행 하 는 데 제공 되 지만 로 컬 방법 은 가상 컴퓨터 에 사용 되 는 Native 방법 서 비 스 를 제공 합 니 다.Native 방법 은 주로 C+로 작 성 됩 니 다.던 진 이상 은 가상 컴퓨터 스 택 과 같 습 니 다.
    4.자바 더미
    자바 더 미 는 앞의 영역 과 다른 것 입 니 다.이 영역 은 모든 스 레 드 에 공 유 된 메모리 영역 입 니 다.대상 인 스 턴 스 를 저장 하고 대상 인 스 턴 스 를 위해 메모 리 를 할당 합 니 다.자바 가상 컴퓨터 규범 에서 이렇게 설명 합 니 다.모든 대상 인 스 턴 스 와 배열 은 더미 에 자바 더 미 를 분배 하 는 것 도 쓰레기 수집 기 관리의 주요 구역 이 고'GC 더미'라 고도 합 니 다.현재 의 쓰레기 회수 알고리즘 은 주로 세대 별로 수집 되 기 때문에 자바 더미 안 은 신세대 와 옛날 로 나 눌 수 있다.또한 자바 가상 컴퓨터 규범 에 따 르 면 자바 더 미 는 물리 적 으로 연속 되 지 않 는 메모리 공간 에 있 을 수 있 고 논리 적 으로 연속 되 기만 하면 된다.인 스 턴 스 가 할당 되 지 않 았 고 더 이상 확장 할 수 없 을 때 OutOf Memory Error 이상 을 던 집 니 다.가상 컴퓨터 의 변조 도 이 지역 에 주목 합 니 다.
    5.방법 구역
    자바 더미 와 마찬가지 로 스 레 드 공 유 는 가상 컴퓨터 에 불 러 온 클래스 정보,상수,정적 변 수 를 저장 하 는 데 사 용 됩 니 다.이 지역 자바 가상 컴퓨터 는 자바 더미 처럼 연속 메모리 가 필요 하지 않 을 뿐만 아니 라 고정 크기 와 확장 도 선택 할 수 있 습 니 다.또한 쓰레기 수집 을 실현 하지 않 는 것 을 선택 할 수 있 습 니 다.이 지역 의 메모리 회수 목 표 는 주로 상수 탱크 의 회수 와 유형 에 대한 마 운 트 해제 입 니 다.메모리 할당 수 요 를 만족 시 킬 수 없 을 때 OutOfmory Error 이상 을 던 집 니 다.
    현재 가상 컴퓨터 Hotspot 은 이 부분 저장 공간 을 JVM 메모리 에서 로 컬 메모리 로 바 꾸 었 습 니 다.즉,이 부분 은 영구 세대 가 아니 라 원 공간 입 니 다.이 메타 공간 은 실제로 JVM 동적 으로 메모리 크기 를 규정 합 니 다.이 교 체 는 어떤 우세 가 있 습 니까?문자열 상수 탱크 는 영구 세대 에 존재 하기 때문에 성능 문제 가 발생 하기 쉽 고 클래스 와 방법 정보의 크기 를 확정 하기 어렵 기 때문에 영구 세대 의 크기 지정 에 어려움 을 가 져 오고 GC 는 영구 세대 에 대해 특수 처 리 를 하기 때문에 GC 의 복잡성 을 증가 시 켰 다.JDK 1.7 부터 문자열 상수 탱크 는 더미 에 나 뉘 었 고 다른 것 은 메타 공간 이 메모리 구분 알고리즘 에서 더욱 합 리 적 이 었 습 니 다.
    6.운행 시 상 당량 탱크
    방법 구역 의 일부분 입 니 다.컴 파일 기간 에 생 성 된 각종 글자 의 양 과 기호 인용 을 저장 하 는 동시에 번역 한 직접 인용 도 실행 중인 상수 탱크 에 저장 하여 동태 성 을 가진다.상수 가 반드시 컴 파일 기간 만 생기 는 것 은 아니 며,운행 기간 에 도 새로운 상수 가 풀 에 들 어 갈 수 있다.예 를 들 어 String 의 Intern()방법.아웃 오 브 메모리 오류 이상 던 지기
    직접 메모리
    이 영역 은 실행 중인 데이터 영역 에 속 하지 않 지만 이 영역 도 자주 사용 되 고 OOM 이상 을 던 집 니 다.이 영역 은 주로 JDK 1.4 에 NIO(New Input/Output)클래스 를 새로 추 가 했 기 때문에 채널 과 버퍼 를 기반 으로 하 는 I/O 방식 을 도입 했다.Native 함수 라 이브 러 리 를 사용 하여 외부 메모 리 를 직접 할당 하고 자바 더미 에 저 장 된 DirectByteBuffer 대상 을 이 메모리 의 인용 으로 조작 할 수 있다.
    이렇게 하면 자바 더미 와 Native 더미 에서 데 이 터 를 복사 하 는 것 을 피하 고 일부 장면 에서 성능 을 현저히 향상 시 킬 수 있다.직접 메모리 분 배 는 자바 더미 크기 의 제한 을 받 지 않 고 이 컴퓨터 의 총 메모리 크기 와 프로세서 주소 지정 공간 에 제한 을 받 을 수 있 습 니 다.OutOf Memory Error 이상 을 던 집 니 다.
    총화
    프로그램 카운터 만 OOM 이상 을 알 리 지 않 고 자바 가상 컴퓨터 스 택 은 OOM 이나 Stack Overflow 이상 을 알 릴 수 있 습 니 다.자바 가상 컴퓨터 스 택 은 주로 저장 방법의 일부 정 보 를 저장 하여 방법 을 순조롭게 실행 할 수 있 고 자바 더 미 는 대상 의 정 보 를 저장 합 니 다.가상 컴퓨터 의 쓰레기 회수 알고리즘 은 주로 이 부분 에 있 고 평소에 조 정 된 구역 도 이 부분 에 있다.
    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기