문제

C에서는 변수에 대한 레지스터를 할당 할 수 있습니다.

register int i = 0;

나는 Java가 해석 된 언어이며 CPU에서 멀리 떨어진 많은 추상화라는 것을 알고 있습니다.

요청조차 사용할 수있는 메커니즘이 있습니까 (그리고 아키텍처가 허용되지 않는 경우, 내 변수가 캐시 나 기본 메모리로 이동하는 대신 레지스터에 남아있는 것은 무엇입니까?

나는 어떤 방법도 있다고 생각하지 않지만, 나는 전에 즐겁게 놀랐습니다.

고맙습니다,

도움이 되었습니까?

해결책

아니요, Java로 요청할 방법이 없습니다. 그러나 적용하는 등 레지스터가 사용되는 것을 막을 수있는 몇 가지 일이 있습니다. volatile 멤버 변수에 대한 수정 자.

다른 팁

register C에서는 등록 할 변수를 넣지 않습니다. 그것은 단순히 컴파일러에게 힌트를 제공합니다. 아마도 레지스터에 넣는 것이 좋을 것입니다.

자바에는 동등한 것이 없습니다.

짧은 공간에서 충분히 사용되면 레지스터 int가 가치가있는 경우 핫스팟 컴파일러가 자체적으로 파악할 수 있어야합니다.

실제로 핫스팟 컴파일러는 C/C ++ 컴파일러보다 더 나은 작업을 수행 할 수 있어야합니다. C/C ++ 컴파일러는 추측해야합니다. 핫스팟을 측정 할 수 있습니다.

Java에는 동등한 것이 없습니다. C에서도 변수가 레지스터에 저장 될 것이라는 보장은 없으며 컴파일러는 자유롭게 무시할 수 있습니다.

Java에서는이 방법이 핫스팟 Jit가 컴파일해야한다고 결정할 때까지 해석됩니다. 컴파일 된 코드의 경우 채색 알고리즘을 사용하여 레지스터 오버 플로우의 경우 변수 및 임시 값을 RAM에/쓰기/로 작성합니다.

나는 Java가 해석 된 언어이며 CPU에서 멀리 떨어진 많은 추상화라는 것을 알고 있습니다.

당신은 그곳에서 자신의 질문에 거의 대답했습니다 :-)

그러나 진지하게, 일반적으로, 가능한 한 명확하고 단순히 코드를 작성하면 JVM은 코드를 올바르게 처리하기 위해 최선을 다할 것입니다.

@register라는 주석을 만들 수 있지만 JVM은 확실히 무시할 것입니다. 예를 들어

@register int i = 0;
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top