2011-09-29 2 views
5

자바는 전반적으로 최적화를 수행하며, 스위치가 희소한지 여부와 얼마나 많은 경우가 있는지에 따라 스위치를 최적화 할 수 있으며 JIT가 코드를 최적화하기에 충분할만큼 코드가 덥다고해도 이해할 수 있습니다. 나는 더 이상 bitwise를 사용하는 것과 같이 "assist"를 제공 할 필요가 있는지 궁금해하고있다. 코드가 실제로 매우 뜨거웠다 고 가정하고 테스트 된 변수 나 비트 단위로 "더 좋은"숫자로 변수를 이동하는 것과 같은 것이다. "좋네요"0xFFXX보다는 0xXX입니다. 요구 사항을 구체적으로 기술 한 핫스팟 JIT 문서가 있습니까? "xxx의 일반적인 프로그래밍 지침을 따라야합니다."JIT를 디스패치 테이블로 전환하는 데 자바가 일반적으로 얼마나 많은 프로그래머가 "도움"을 필요로합니까?

답변

0

자바 자체가 virtual machine 이상으로 실행되기 때문에 여기서 뭔가를 놓치지 않는 한 쉽게 할 수있는 방법이 없다고 생각합니다.

Java에서는 일종의 블랙 박스가 생기고 더 최적화하기 위해 IMHO가 위험합니다. 핫스팟 JIT 백서를 들어

, see here

+2

나는 이것이 답이 될까봐 걱정했다. 핫스팟 또는 유사한 JIT에 대한 조건이 디스패치 테이블로의 집중적 인 전환을 최적화하기 위해 궁금해하고 있었기 때문에 최적화를 위해 뜨거웠고 선출 된 것으로 밝혀졌습니다. –

+0

내가 무슨 뜻인지 알 겠어. 흠, 내가 할 수있는 한이 질문에 Bounty를 넣을 것이다. – Coffee

1

이에 쉽게 답이있을려고하고 있지 않다.

나는이 질문을 hotspot-dev에 가져다 - 어떻게 이런 일이 발생했는지 더 많은 정보를 제공 할 수있을 것이다.

이에 흥미로운 관점을 가지고있는 JVM-1 메일 링리스트에 교제 할 수있다 다른 사람 (등 찰리 임마, 레미 Forax, 존 로즈)

2

tableswitch 또는 lookupswitch 중 하나에 대한 결정은 이미 완료 javac 컴파일러. JIT가 lookupswitchtableswitch으로 변환하려고 시도한 것을 들어 본 적이 없습니다.

첫 번째 단계는 바이트 코드 switch을 확인하는 것입니다.

+0

그렇다면 javac이 테이블 스위치로 만드는 것을 보장하는 안전한 코딩 가정 (특정 내부 컴파일러 규칙)은 무엇입니까? 오류를 "추측"하고 시행 착오를 수행하는 대신 "더티"할 바이트 코드를 사용하십시오. –

관련 문제