자바 volatile

2175 단어 자바volatile
메모리 모델 기본 개념
컴퓨터 가 프로그램 을 실행 할 때 모든 명령 은 CPU 에서 실행 되 고 명령 을 실행 하 는 과정 에서 반드시 데이터 의 읽 기와 쓰기 와 관련된다.프로그램 이 실행 되 는 과정 에서 임시 데 이 터 는 메 인 메모리(물리 적 메모리)에 저장 되 어 있 기 때문에 문제 가 존재 합 니 다.CPU 의 실행 속도 가 매우 빠 르 기 때문에 메모리 에서 데 이 터 를 읽 고 메모리 에 데 이 터 를 기록 하 는 과정 은 CPU 가 명령 을 수행 하 는 속도 보다 훨씬 느 리 기 때문에 언제든지 데이터 에 대한 작업 은 메모리 와 의 상호작용 을 통 해 이 루어 져 야 합 니 다.명령 집행 속 도 를 크게 낮 출 것 이다.그래서 CPU 에 고속 캐 시가 생 겼 다.

동시 프로 그래 밍 의 세 가지 개념
1.원자 성
즉,하나의 조작 이나 여러 개의 조작 이 모두 실행 되 거나 실행 되 는 과정 은 어떠한 요소 에 도 중단 되 지 않 거나 실행 되 지 않 는 다.
2,가시 성
여러 스 레 드 가 같은 변수 에 접근 할 때 한 스 레 드 가 이 변수의 값 을 수정 하고 다른 스 레 드 는 수 정 된 값 을 즉시 볼 수 있 습 니 다.
3,질서 성
즉,프로그램 이 실행 하 는 순 서 는 코드 의 선후 순서에 따라 집행 된다.일반적으로 프로 세 서 는 프로그램의 운행 효율 을 높이 기 위해 입력 코드 를 최적화 시 킬 수 있 습 니 다.프로그램 에서 각 문장의 실행 순서 가 코드 의 순서 와 일치 하 는 것 을 보장 하지 않 지만 프로그램의 최종 실행 결과 와 코드 순서 가 일치 하 는 것 을 보장 합 니 다.
자바 메모리 모델
자바 가상 컴퓨터 규범 에서 자바 메모리 모델(자바 Memory Model,JMM)을 정의 하여 각 하드웨어 플랫폼 과 운영 체제 의 메모리 접근 차 이 를 차단 하여 자바 프로그램 이 각종 플랫폼 에서 일치 하 는 메모리 접근 효 과 를 얻 도록 하려 고 합 니 다.그러면 자바 메모리 모델 은 어떤 것 을 규정 하고 있 습 니까?프로그램 에서 변수의 접근 규칙 을 정 의 했 습 니 다.크게 말 하면 프로그램 이 실행 하 는 순 서 를 정 의 했 습 니 다.좋 은 실행 성능 을 얻 기 위해 자바 메모리 모델 은 실행 엔진 이 프로세서 의 레지스터 나 고속 캐 시 를 사용 하여 명령 실행 속 도 를 높이 는 것 을 제한 하지 않 고 컴 파일 러 가 명령 을 정렬 하 는 것 을 제한 하지 않 습 니 다.자바 메모리 모델 에 도 캐 시 일치 문제 와 명령 재 정렬 문제 가 존재 한 다 는 것 이다.

그림 의 작업 메모 리 는 실제 하드웨어 차원 의 cpu cache 에 대응 합 니 다.
volatile 키워드
그것 은 가시 성과 질서 성 을 보장 하지만 원자 성 을 보장 하지 않 는 다.
다음 단락 은 에서 발췌 한 것 이다.
"volatile 키 워드 를 추가 하거나 volatile 키 워드 를 추가 하지 않 았 을 때 생 성 된 어 셈 블 리 코드 를 관찰 한 결과,volatile 키 워드 를 추가 할 때 lock 접두사 명령 이 하나 더 나 옵 니 다"
lock 접두사 명령 은 실제 메모리 장벽(메모리 울타리)에 해당 하 며 메모리 장벽 은 3 가지 기능 을 제공 합 니 다.
1.명령 을 다시 정렬 할 때 그 뒤의 명령 을 메모리 장벽 앞 에 배치 하지 않 고 앞의 명령 을 메모리 장벽 뒤에 배치 하지 않 는 다.즉,메모리 장벽 이라는 명령 을 실행 할 때 그 앞에서 의 작업 이 모두 완료 되 었 습 니 다.
2.캐 시 에 대한 수정 작업 을 메 인 저장 소 에 즉시 기록 하도록 강제 합 니 다.
3.쓰기 동작 이 라면 다른 CPU 에 대응 하 는 캐 시 줄 이 잘못 될 수 있 습 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기