java jpoint conference에서 비디오를보고 있습니다. 슬라이드에 영어 이외의 실례 : 나는 Alexey Shipilev 보고서에서 슬라이드를 다음에 대한 질문이 있습니다. 실제로 작가는 변수 세트가 될 수 없다고 말합니다. r1 = 1 (Y)
r2 = 0 (x)
r3 = 1 (x)
r4 = 0 (Y)
비디오에 따르면 그는 분명히 그렇
명확한 방식으로 개념을 설명하는 포괄적 인 출처를 찾을 수 없습니다. 내 이해는 스레드가 새로운 객체를 할당하는 eden에 메모리 덩어리를 제공한다는 것입니다. 경쟁 쓰레드는 다소 연속적인 에덴 (eden) 덩어리를 갖게 될 것입니다. TLAB에서 첫 번째 스레드의 빈 영역이 부족하면 어떻게됩니까? 그것은 eden의 새 덩어리를 요청합니까?
의 내가 이런 식으로 실행되는 두 개의 스레드가 있다고 가정 해 봅시다 : 공유 된 이미지의 픽셀을 업데이트하는 동안 계산을 수행 스레드 A를 스레드 B는 주기적으로 화면 에 이미지 복사를 읽고 스레드 A는 신속하게 작업을 수행합니다. 즉, 1 초당 1 백만 건의 업데이트로 잠금/뮤텍스/모니터를 자주 잠그고 잠금을 해제하는 것이 좋지 않을 것으로 생각됩니다
를 호출? 과 같은 구현 세부 정보는 의도적으로 제외됩니다. method1은 closable을 캡처합니까?이 질문의 첫 번째 부분에 나와 있습니다. static char* value;
void capture(char* ptr){
value = ptr;
}
int len(void) {
return strlen(value);
}
이전에 답변을 받았을 수 있지만 문제가 복잡하기 때문에 확인이 필요합니다. 그래서 질문을 바꿉니다 질문 1 : 스레드가 동기화 된 블록에 들어갈 때 메모리 바리어는 내가 동기화 한 객체의 필드뿐만 아니라 어떤 필드도 포함하게됩니까? 많은 객체가 동기화 된 블록 내에서 수정되면 스레드 메모리 캐시간에 많은 양의 메모리 이동이 발생합니다. Thread 1
o
java에 리더 및 라이터 스레드가 있으며 아래 코드 스 니펫이 있습니다. int volatile ready = false;
int var1;
int var2;
int var3;
T1:
while(!ready);
print var1;
print var2;
print var3;
T2:
var1 = 1;
var2
을이 질문은 JMM 우려 : 구체적 : https://www.cs.umd.edu/~pugh/java/memoryModel/jsr133.pdf 당신이 JMM 사양에서 다음 식을 (이 13 페이지의 섹션 5) 설명시겠습니까 두 작업이 발생하기 전에 관계를 공유하는 경우 관계 이전에 발생한 모든 코드와 의 순서대로 발생하지 않아도됩니다. 예를 들어, 다른 스레드
private static class Node<E> {
volatile E item;
volatile Node<E> next;
/**
* Constructs a new node. Uses relaxed write because item can
* only be seen after publication via c