2013-01-15 1 views
2

C 프로그래밍에서는 CPU 레지스터에 변수를 유지하기 위해 register 지정자를 사용합니다. 마찬가지로 자바 CPU 캐시에 객체를 유지하는 자바에서 지시자가cpu 레지스터에 java 보관 객체가 있습니다.

+1

자바 키워드를 살펴 보았습니까? –

+4

C에서조차도, 'register' 수정자는 컴파일러에 대한 "힌트"일뿐입니다. –

+3

@DaveNewton 내가'goto'와'const';를 볼 자바 키워드를 볼 때) –

답변

4

자바 (확실히 C에 비해) 고급 언어이므로 이러한 종류 참견 불가능 낮은 수준의 기능성

C와는 다른 점은 Java에서 VM을 실행해야한다는 것입니다.이 VM은 수시로 다양한 레지스터가 필요할 것입니다. 그래서, 얼마나 많은 레지스터가 있는지 알 수 없으므로 하나의 레지스터를 사용할 수 있습니다. 물론 각 VM은 다르게 (내부적으로) 동작 할 수 있으므로 실제 방법이 있습니다.

1

아니요, Java 컴파일러 (해야 ...)가 처리합니다. 현대 컴파일러는 인간의 힌트가 더 이상 필요하지 않습니다 (대부분의 경우 ...).

4

개체가 Java (또는 표준 C AFAIK)에서 캐시에 있는지 여부는 제어 할 수 없습니다. 일반적으로 레지스터에 값을 배치하기 위해 C에서 register 힌트를 제공 할 필요가 없으며 레지스터에 값이 있음을 보장하지 않습니다. 있는 변수

자바에서 JIT는 레지스터에 결정하고 CPU는 객체를 결정 (또는 그 중 일부는) 어느 캐시에 당신이하려고하는 문제가 어떤 종류의

을 (당신이 3 개 이상 가질 수)입니다 풀다?

BTW : JIT를 현명하게 만들려고하면 코드가 더 느려지는 경향이 있습니다.

+0

일부 특정 객체가 의도적으로 CPU 캐시에 보관 될 때 자바 프로그램의 성능을 비교하고 싶습니다. 이것은 cpu miss를 줄입니다. – Vivek

+0

관심있는 캐시 (L1, L2, L3)에 비해 훨씬 적은 양의 데이터를 사용하여 객체를 반복적으로 액세스하여 캐시에 보관할 수 있습니다. 즉 처음 액세스 할 때 걸린 시간을 무시합니다. 참고 : 레지스터는 캐시와 매우 다릅니다. 레지스터에 객체를 배치 할 수는 없지만 반복적으로 액세스하여 레지스터에 값을 배치 할 수 있습니다. –

0

Java 사양은 프로그래머에게 이러한 기능을 제공하지 않습니다. 그러나 여전히 JVM은 최적화 목적으로 레지스터 또는 다른 내부 메모리 위치를 사용할 수 있습니다.

그러나 Java는 레지스터에 값을 캐시하거나 저장할 수 없도록 기능을 제공합니다. 필드/데이터 멤버 휘발성을으로 선언하여이 작업을 수행합니다.

관련 문제