자바 메모리 모델 지식 총화

【1】CPU 와 캐 시 일치 성

컴퓨터 가 프로그램 을 실행 할 때 모든 명령 은 CPU 에서 실행 되 고 실행 할 때 데이터 와 접촉 하 는 것 을 피 할 수 없다 는 것 을 잘 알 아야 한다.컴퓨터 위의 데 이 터 는 메 인 메모리,즉 컴퓨터 의 물리 적 메모리 에 저 장 된 것 이다.
처음에는 무사 하 였 으 나 CPU 기술 이 발전 함 에 따라 CPU 의 집행 속도 가 점점 빨 라 졌 다.그러나 메모리 기술 은 큰 변화 가 없 기 때문에 메모리 에서 데 이 터 를 읽 고 기록 하 는 과정 과 CPU 의 실행 속도 에 비해 차이 가 점점 커지 기 때문에 CPU 가 메모 리 를 조작 할 때마다 많은 대기 시간 을 소모 하 게 된다.
그래서 사람들 은 CPU 와 메모리 사이 에 캐 시 를 추가 하 는 좋 은 방법 을 생각해 냈 다.캐 시 개념 은 모두 가 알 고 있 는 것 이 바로 데이터 복사 본 을 저장 하 는 것 이다.그의 특징 은 속도 가 빠 르 고 메모리 가 적 으 며 비 싼 것 이다.
그러면 프로그램의 실행 과정 은 다음 과 같다.
프로그램 이 실행 되 는 동안 연산 에 필요 한 데 이 터 를 메 인 메모리 에서 CPU 의 캐 시 로 복사 합 니 다.그러면 CPU 가 계산 할 때 직접 캐 시 에서 데 이 터 를 읽 고 기록 할 수 있 습 니 다.연산 이 끝 난 후에 캐 시 에 있 는 데 이 터 를 메 인 메모리 로 새로 고 칠 수 있 습 니 다.
CPU 와 메 인 메모리 사이 에 캐 시 를 추가 하면 다 중 스 레 드 장면 에서 캐 시 일치 성에 문제 가 있 을 수 있 습 니 다.즉,다 중 핵 CPU 에 서 는 각 핵 자체 캐 시 에서 같은 데이터 에 대한 캐 시 내용 이 일치 하지 않 을 수 있 습 니 다.
【2】프로세서 최적화 와 명령 정렬
CPU 와 메 인 메모리 사이 에 캐 시 를 추가 하면 다 중 스 레 드 장면 에서 캐 시 일치 성에 문제 가 있 을 수 있다 고 언급 했다.이런 상황 을 제외 하고 또 하나의 하드웨어 문제 도 비교적 중요 하 다.그것 은 프로세서 내부 의 연산 단위 가 가능 한 한 충분히 이용 되도록 하기 위해 서 입 니 다.프로세서 가 입력 코드 를 어 지 럽 게 처리 할 수 있 습 니 다.이것 이 바로 프로세서 최적화 다.
현재 많은 유행 하 는 프로세서 들 이 코드 에 대해 최적화 난 서 처 리 를 하 는 것 을 제외 하고 많은 프로 그래 밍 언어의 컴 파일 러 도 비슷 한 최적화 가 있 을 것 이다.예 를 들 어 자바 가상 컴퓨터 의 인 스 턴 트 컴 파일 러(JIT)도 명령 을 다시 배열 할 것 이다.
프로세서 최적화 와 컴 파 일 러 가 명령 을 다시 배열 하도록 내 버 려 두 면 여러 가지 문제 가 발생 할 수 있다 는 것 을 짐작 할 수 있다.
해결 방법:메모리 장벽
[3]자바 메모리 모델 이란 무엇 인가
메모리 모델
공유 메모리 의 정확성(가시 성,질서 성,원자 성)을 확보 하기 위해 메모리 모델 은 공유 메모리 시스템 의 다 중 루틴 프로그램 읽 기와 쓰기 작업 행위 의 규범 을 정의 했다.이러한 규칙 을 통 해 메모리 에 대한 읽 기와 쓰기 동작 을 규범화 시 켜 명령 집행 의 정확성 을 확보한다.
자바 메모리 모델(Java Memory Model,JMM)은 자바 가상 컴퓨터 가 규범 적 으로 정의 한 것 으로 자바 프로그램 이 다양한 하드웨어 와 운영 체제 에서 메모리 에 대한 접근 차 이 를 차단 하면 자바 프로그램 이 다양한 플랫폼 에서 메모리 접근 의 일치 성 을 실현 할 수 있다.

자바 메모리 모델 의 주요 목 표 는 프로그램 에서 변 수 를 정의 하 는 접근 규칙 입 니 다.즉,가상 컴퓨터 에서 변 수 를 메 인 메모리 에 저장 하거나 변 수 를 메 인 메모리 에서 이러한 바 텀 디 테 일 을 꺼 내 는 것 이다.주의해 야 할 것 은 이곳 의 변 수 는 우리 가 자바 프로그램 을 쓰 는 변수 와 완전히 같 지 않다 는 것 이다.여기 서 변 수 는 인 스 턴 스 필드,정적 필드 를 말 하 며 배열 대상 을 구성 하 는 요 소 를 말 합 니 다.그러나 국부 변수 와 방법 적 인 파 라 메 터 는 포함 되 지 않 습 니 다(이것 은 스 레 드 의 개인 적 인 것 이기 때 문 입 니 다).
자바 메모리 모델 에 관련 된 개념 은 다음 과 같다.
주 메모리:자바 가상 컴퓨터 는 모든 변 수 를 주 메모리 에서 만들어 야 합 니 다.앞에서 말 한 물리 기기 의 메 인 메모리 에 비해 물리 기기 의 메 인 메모 리 는 전체 기계 의 메모리 일 뿐 가상 컴퓨터 의 메 인 메모 리 는 가상 컴퓨터 메모리 의 일부분 이다.
작업 메모리:자바 가상 컴퓨터 의 모든 스 레 드 는 자신의 작업 메모리 가 있 습 니 다.이 메모 리 는 스 레 드 개인 입 니 다.앞에서 말 한 캐 시 와 비교 할 수 있 습 니 다.스 레 드 의 작업 메모리 에 스 레 드 에 필요 한 변 수 를 주 메모리 에 저장 합 니 다.가상 컴퓨터 에 따 르 면 스 레 드 가 메 인 메모리 변 수 를 수정 하려 면 스 레 드 의 작업 메모리 에서 해 야 하 며 메 인 메모리 의 변 수 를 직접 읽 을 수 없습니다.서로 다른 스 레 드 간 에 도 상대방 의 작업 메모리 에 서로 접근 할 수 없습니다.스 레 드 간 에 변 수 를 전달 하 는 값 이 필요 하 다 면 메 인 메모리 로 중개 로 전달 해 야 합 니 다.
작업 메모리 와 메 인 메모리 의 구분 은 자바 더미,스 택,방법 구역 의 구분 과 다 릅 니 다.이들 은 기본적으로 관계 가 없습니다.만약 에 억지로 대응 하면 메 인 메모리 는 인 스 턴 스 데이터 부분 으로 이해 할 수 있 고 작업 메모리 는 스 택 의 일부 구역 에 대응 합 니 다.
【4】volatile 의 메모리 의미
volatile 에서 쓴 메모리 의미:
변 수 를 쓸 때 JMM 은 이 스 레 드 의 개인 메모리 에 있 는 공유 변 수 를 주 메모리 에 업데이트 하고 다른 스 레 드 의 값 을 무효 로 설정 합 니 다.
volatile 에서 읽 은 메모리 의미:
하나의 변 수 를 읽 을 때 JMM 은 개인 공간 에서 의 값 이 효력 을 잃 었 는 지 여 부 를 먼저 판단 합 니 다.효력 을 잃 으 면 스 레 드 는 다음 에 메 인 저장 소 에서 변 수 를 읽 습 니 다.
【5】자물쇠 의 메모리 의미
스 레 드 가 잠 금 을 풀 때 JMM 은 이 스 레 드 에 대응 하 는 로 컬 메모리 의 공유 변 수 를 주 메모리 에 새로 고 칩 니 다.
스 레 드 가 잠 금 을 가 져 올 때 JMM 은 이 스 레 드 에 대응 하 는 로 컬 메모리 가 잘못 되 었 습 니 다.따라서 모니터 에 보 호 된 임계 구역 코드 는 주 메모리 에서 공유 변 수 를 읽 어야 합 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기