자바 병발 프로 그래 밍 예술의 병발 메커니즘 의 밑바닥 실현 원리
3511 단어 독서 노트
volitate
정의.
자바 언어 규범 제3 판 에서 volatile 에 대한 정 의 는 다음 과 같다.자바 프로 그래 밍 언어 는 스 레 드 가 공유 변 수 를 방문 할 수 있 도록 합 니 다.공유 변 수 를 정확 하고 일치 하 게 업데이트 할 수 있 도록 스 레 드 는 배타 적 자 물 쇠 를 통 해 이 변 수 를 단독으로 얻 도록 해 야 합 니 다.자바 언어 는 volatile 을 제공 하여 어떤 경우 에는 자물쇠 보다 더 편리 합 니 다.한 필드 가 volatile 로 밝 혀 지면 자바 스 레 드 메모리 모델 은 모든 스 레 드 가 이 변 수 를 보 는 값 이 일치 하도록 확보 합 니 다.
의 원리
형식.
4.567917.일반 방법 에 대해 자 물 쇠 는 현재 인 스 턴 스 대상 이다4.567917.정적 동기 화 방지 에 있어 자 물 쇠 는 현재 클래스 의 class 대상 이다4.567917.동기 화 방법 블록 에 대해 자 물 쇠 는 synchronized 괄호 안의 대상 이다실현 방식
JVM 은 Monitor 대상 의 실현 방법 과 코드 블록 의 동기 화 를 바탕 으로 합 니 다.모든 대상 은 Monitor 와 관련 이 있 습 니 다.둘 다 Monitorenter 와 Monitorexit 명령 을 사용 하여 실현 할 수 있다.구체 적 인 잠 금 추가 과정 은 다음 과 같다.
4.567917.Monitorenter 명령 이 동기 코드 를 삽입 하여 시작 하 는 부분
기억 장치
이로써 우 리 는 해결 되 지 않 은 문제 가 하나 더 있다.그것 이 바로 잠 긴 대상 이 어떻게 저 장 했 는가?사실 synchronized 에 대응 하 는 잠 금 은 자바 대상 머리 에 기록 되 어 있 습 니 다.자바 개체 헤드 저장 설명
길이
내용.
설명 하 다.
32/64bit
Mark Word
대상 의 hashCode 나 잠 금 정보 등 을 저장 합 니 다.
32/64bit
Class Meta Address
대상 형식 데 이 터 를 저장 하 는 포인터 등
32/64bit
Array Length
배열 의 길이(현재 대상 이 배열 이 라면)
Mark Word 의 상태 변화
잠 금 상태
23bit
2bit
4bit
1bit(잠 금 편향 여부)
2 bit(잠 금 위치)
경량급 자물쇠
스 택 의 잠 금 기록 을 가리 키 는 지침
00
헤비급 자물쇠
상호 배척 량(헤비급 자물쇠)을 가리 키 는 지침
10
GC 태그
비다
비다
비다
11
편향 자물쇠
스 레 드 ID
Epoch
대상 세대 별 연령
1
01
Mark Word 의 저장 구조(64bit)
잠 금 상태
25bit
31bit
1bit (cms_free)
4bit(세대 구분)
1bit(잠 금 표시 위치)
2bit(자물쇠 편향 여부)
자물쇠 없 음
unused
hashCode
0
01
편향 자물쇠
ThreadID(25bit + 29bit)
Epoch(2bit)
0
01
업그레이드 와 최적화
자 바 는 자 물 쇠 를 가 져 오고 자 물 쇠 를 방출 하 는 성능 소 모 를 줄 이기 위해'편향 자물쇠'와'경량급 자물쇠'를 도입 했다.
편향 자물쇠
경량급 자물쇠
헤비급 자물쇠
자물쇠 의 장단 점 대비
자물쇠.
장점.
결점.
적용 필드
편향 자물쇠
잠 금 추가 와 잠 금 해 제 는 추가 소모 가 필요 없 으 며,비 동기 화 방법 을 실행 하 는 것 에 비해 나 초 단위 의 차이 만 존재 합 니 다.
만약 스 레 드 간 에 자물쇠 경쟁 이 존재 한다 면,자 물 쇠 를 취소 하 는 소 모 를 가 져 올 것 이다.
동기 블록 에 한 개의 스 레 드 만 접근 하 는 장면 을 사용 합 니 다.
경량급 자물쇠
경쟁 은 막 히 지 않 고 프로그램의 응답 속 도 를 높 였 다.
잠 금 경쟁 스 레 드 를 끝까지 얻 지 못 하면,자동 잠 금 을 사용 하면 CPU 가 소 모 됩 니 다.
응답 시간 을 추구 합 니 다.동기 블록 실행 속도 가 매우 빠 릅 니 다.
헤비급 자물쇠
스 레 드 경쟁 은 차단 방식 을 사용 하여 CPU 를 소모 하지 않 습 니 다.
스 레 드 가 막 혀 서 응답 시간 이 느 립 니 다.
스루풋 을 추구 하고 동기 화 속도 가 비교적 길다.
원자 조작
원자 조작(atomic operation)은'중 단 될 수 없 는 하나 또는 일련의 조작'을 의미한다.
하드웨어 등급 의 지원:버스 잠 금(잠 금 표 와 유사 하고 현재 CPU 만 메모리 와 통신 할 수 있 음),캐 시 잠 금(잠 금 줄 과 유사 하 며 현재 CPU 만 메모리 에 대응 하 는 데 이 터 를 수정 할 수 있 음)순환 CAS.본질 적 으로 CMPXCHG 명령 을 사용 하여 실현 하 였 다.그러나 CAS 는 ABA 가 존재 하고 자 회전 은 CPU 의 집행 효율 을 낮 추 며 여러 공유 변 수 를 직접 원자 조작 할 수 없다4.567917.자물쇠 체 제 를 사용 하여 원자 조작 을 실현 한다의문
의문 이 있 으 면 토론 을 환영 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로그'메타프로그램 루비 버전 2'3장 읽기동적 방법 Object#send 호출 방법은 약간 메모와 Object#send obj.send(:my_method, 3) Object#send를 사용하면 어떤 방법으로든 호출할 수 있습니다. privete 방법을 호...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.