자바 오라클 연동 예제

안녕하세요 Javin, “Java의 다른 스레드가 _instance 변수의 초기화 된 상태의 절반을 볼 수 있습니다”라는 의미는 무엇입니까? 자세히 설명해 주시겠습니까? Java 5의 최종 필드의 의미 체계는 volatile:[11] 로컬 변수 tempper가 정확성을 위해 필요합니다: 단순히 null 검사및 반환 문 모두에 대한 도우미래퍼를 사용하는 것이 실패할 수 있습니다. 자바 메모리 모델에서 허용되는 재정렬을 읽습니다. [12] 이 구현의 성능이 휘발성 구현보다 반드시 더 나은 것은 아닙니다. JSR133에서 명확히 한 바와 같이 편향된 잠금은 Java 메모리 모델에서 허용됩니다. 자바 언어 사양, 제 3 판, 제 17, 섹션 4를 참조하십시오. 더그 레아의 JSR-133 쿡북은 JVM 개발자 또는 호기심 자바 프로그래머를위한 훌륭한 자원입니다. 핫스팟의 편향된 잠금 방식은 자신, 마크 모어, 빌 셔러가 저술한 다음 논문에서 발생했습니다. 간단히 말해서 Java 모니터를 획득하는 데 일반적으로 사용되는 비교 및 스왑(CAS) 작업은 CPU 실행시 상당한 로컬 대기 시간이 발생합니다. 대부분의 개체는 수명 동안 최대 하나의 스레드로 잠겨 있으므로 해당 스레드가 개체를 자체쪽으로 편향할 수 있도록 허용합니다. 일단 편향되면 해당 스레드는 비용이 많이 드는 원자성 지침에 의존하지 않고 개체를 잠그고 잠금을 해제할 수 있습니다.

분명히 개체는 지정된 시간에 한 스레드에서 가장 많은 스레드로 편향될 수 있습니다. (해당 스레드를 바이어스 홀딩 스레드라고 합니다.) 그러나 다른 스레드가 편향된 개체를 가져오려고 하면 원래 스레드에서 바이어스를 취소해야 합니다. (이 시점에서 우리는 객체를 rebias하거나 단순히 객체의 수명의 나머지 부분에 대한 일반 잠금으로 되돌릴 수 있습니다). 해지의 주요 과제는 해지자와 해지(바이어스 홀딩 스레드)를 조정하는 것입니다. 이 문서에서 언급했듯이 해지는 신호, 현탁액 및 안전 지점과 같은 다양한 방법으로 구현될 수 있습니다. 비판적으로, 수익성을 증명하기 위해 편향된 잠금의 경우 원자 명령을 피함으로써 얻은 이점은 해지 비용을 초과해야 합니다. 편향된 잠금을 개념화하는 또 다른 동등한 방법은 원래 소유자가 경합이 발생할 때까지 개체의 잠금을 해제하는 것을 연기한다는 것입니다. 편향된 잠금은 가와치야의 논문에서 잘 설명되어 있는 잠금 예약 개념과 유사합니다.