자바 가상 머 신 이 실 행 될 때 데이터 영역 집합
프로그램 계수 기 는 하나의 개념 모델 로 서 다음 실행 해 야 할 바이트 코드 명령 이 어디 에 있 는 지 를 표시 하 는 데 사용 된다.
자바 의 다 중 스 레 드 는 실제 적 으로 스 레 드 윤전 을 통 해 이 루어 집 니 다.단일 핵 기계(또는 단일 cpu)라면 엄격 한 의미 에서 한 시간 블록 에서 하나의 스 레 드 만 실 행 됩 니 다.스 레 드 전환 후 정확 한 실행 위치 로 회복 하기 위해 서 는 모든 스 레 드 에 하나의 단독 카운터 가 필요 합 니 다.모든 카운터 간 에 독립 적 으로 서로 간섭 하지 않 으 면 됩 니 다.
스 레 드 가 자바 방법 을 실행 하고 있다 면 PC 는 실행 중인 가상 컴퓨터 바이트 코드 명령 의 영역 을 가리 키 며,native 방법 을 실행 하고 있다 면 undefined 입 니 다.
자바 가상 컴퓨터 스 택
자바 virtue machine 도 스 레 드 의 개인 적 인 것 으로 스 레 드 와 같은 생명 주 기 를 가지 고 있 습 니 다.
가상 스 택 은 자바 방법 으로 실 행 된 메모리 모델 을 설명 합 니 다.stack frame(스 택 프레임)은 자주 언급 되 는 개념 으로 내부 변수 표,조작 스 택,동적 링크,방법 출구 등 을 저장 하 는 데 사용 된다.
모든 방법 은 호출 에서 실행 이 끝 날 때 까지 하나의 스 택 프레임 이 가상 스 택 에 있 는 스 택 과 스 택 에 대응 합 니 다.
우 리 는 예전 에 그림 을 그 려 서 메모리 영역 을 설명 할 때 항상 Heap(메모리 쌓 기)와 stack(스 택 메모리)두 부분 에 관심 을 가 졌 습 니 다.이것 은 대상 메모리 분배 와 가장 관련 된 두 개의 메모리 구역 입 니 다.일반적으로 말 하 는 stack 은 가상 컴퓨터 스 택 이거 나 더 구체 적 으로 가상 컴퓨터 스 택 의 부분 변수 표 입 니 다.
부분 변수 표 는 컴 파일 러 가 알 수 있 는 각종 기본 데이터 형식(boolean byte double char int short long float)대상 참조(reference 형식,대상 자체 가 아 닙 니 다.주소 참조 포인터 일 수도 있 고 대표 대상 의 핸들 일 수도 있 습 니 다)return address 형식(바이트 명령 의 주 소 를 가리 키 는 것)을 저장 합 니 다.
부분 변수 표 의 의 미 는 표 에 필요 한 메모 리 를 컴 파일 러 에 분배 할 수 있다 는 것 이다.프로그램 이 하나의 방법 을 호출 할 때마다 방법 은 frame 에서 얼마나 많은 부분 메모리 공간 을 분배 해 야 하 는 지 확인 하 는 것 이다.
두 가지 이상 상황
스 레 드 가 요청 한 스 택 의 깊이 가 가상 컴퓨터 가 허용 하 는 것 보다 크 면 StackOverFlowError 입 니 다.동적 확장 을 지원 하 는 가상 컴퓨터(대부분의 현대 가상 컴퓨터 가 지원)가 충분 한 메모리 를 신청 하지 못 하면 OutOf Memory Error 이상 을 보고 합 니 다.
로 컬 방법 창고
로 컬 방법 스 택 은 자바 가상 컴퓨터 스 택 과 대응 하 는 개념 으로 그들의 역할 도 비슷 하 다.유일한 차이 점 은 로 컬 방법 스 택 은 native 방법 을 실행 하 는 것 이 고 자바 가상 컴퓨터 스 택 은 자바 방법(즉 바이트 코드)서 비 스 를 수행 하 는 것 이다.
Sun 의 HotSpot 가상 컴퓨터 에서 로 컬 방법 스 택 과 가상 컴퓨터 스 택 은 하나 입 니 다.
자바 더미
더 미 는 모든 스 레 드 가 공유 하 는 영역 입 니 다.이 메모리 영역 에 존재 하 는 유일한 목적 은 대상 인 스 턴 스 를 저장 하 는 것 입 니 다.가상 컴퓨터 가 시 작 될 때 생 성 됩 니 다.거의 모든 대상 인 스 턴 스 가 여기에 메모리 가 분 배 됩 니 다.
모든 대상 인 스 턴 스 와 배열 을 쌓 아 올 려 야 합 니 다.-자바 가상 컴퓨터 규범
JIT 컴 파일 러 가 발전 하고 탈출 기술 이 성숙 해 지면 서 이 말 도 그렇게 절대적 이지 않 게 변 했다.
GC(garbage collection)도 이 지역 에서 발생 하기 때문에 가끔 GC 더미 라 고도 불 린 다.
방법 영역
방법 구역 은 자바 더미 와 비슷 합 니 다.스 레 드 가 공유 하 는 메모리 구역 입 니 다.가상 컴퓨터 에 불 러 온 클래스 정보,상수,정적 변수,인 스 턴 트 컴 파일 러 가 컴 파일 한 코드 를 저장 하 는 데 사 용 됩 니 다.
자바 더미 와 비슷 하 게 들 리 는 것 같 습 니 다.자바 가상 컴퓨터 표준 에서 도 이 를 쌓 아 올 리 는 논리 적 인 부분 으로 간주 하지만 Non-heap 이 라 고 부 릅 니 다.자바 더미 와 구분 하기 위해 서 입 니 다.
Permanent Generation?그럼 이 방법 구 는 영구 대 입 니까?아 닙 니 다.다만 핫 스 팟 가상 머 신 디자인 에 서 는 영구 세대 로 방법론 을 구현 했다.(JDK 1.7 에 서 는 영구 세대 에 놓 여 있 던 문자열 상수 풀 을 옮 겼 습 니 다)
런 타임 상수 풀(Runtime Constant Pool)
이것 도 방법 구역 의 중요 한 부분 입 니 다.class 파일 은 버 전,필드,방법,인터페이스 등 설명 정 보 를 제외 하고 상수 탱크 도 있 습 니 다.컴 파일 기간 에 생 성 된 각종 글자 양(Literal)과 기호 참조(Symbolic References)를 저장 하 는 데 사 용 됩 니 다.이 부분의 내용 은 클래스 로 딩 후 실행 시 상수 탱크 에 들 어가 서 저장 합 니 다.
글자 의 양 이 비교적 이해 하기 쉽 고 자바 언어 차원 의 상수 입 니 다.예 를 들 어 텍스트 문자열 은 final 의 변수 로 설명 합 니 다.
기 호 는 이것 을 인용 하여 나 는 처음으로 무슨 뜻 인지 이해 하지 못 했다.사실은 번역 원리 의 한 개념 으로 다음 과 같은 세 가지 상수 도 포함한다.
류 와 인터페이스의 전체 제한 명칭필드 이름과 설명자방법 명칭 과 설명자
동적,이것 은 실행 시 상 당량 탱크 의 중요 한 특성 입 니 다.실행 기간 에 도 새로운 상 당량 을 상수 구역 에 넣 을 수 있 습 니 다(기본 포장 류 와 String 을 포함 하고 intern()을 호출 하여 String 을 상수 탱크 에 강제로 넣 을 수 있 습 니 다).
왜 상 당량 탱크 를 운행 해 야 합 니까?
더 적은 메모리.직접 값 을 할당 할 때 상수 탱크 안의 대상 을 이용 합 니 다.new 에 간 것 이 아니 라더 빠 른 속도.equals()보다 빠 릅 니 다.
Integer a = 23;// Integer i1=Integer.valueOf(40);
Integer b = new Integer(23);//
ps.저 는 이 디자인 사고 와 데이터 베이스 연결 탱크 가 차이 가 많 지 않 고 대조 적 으로 이해 할 수 있다 고 생각 합 니 다.참고 자료
《자바 가상 기 를 깊이 이해 하 다》.
총결산
이상 은 이 글 의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가 치 를 가지 기 를 바 랍 니 다.여러분 의 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.