2016-10-03 2 views
1

우선에 따라 단일 명령에 대한 Java 스레드 실행, 내가 문제를 명확하게 설명하지 않을 수 있는지, 내가 약기본 CPU 또는 바이트 코드 모두의

부탁 해요 코멘트를 남겨주세요 여러 자바 바이트 코드의 지시에 OCA/OCP JAVA® SE 7 프로그래머 I & II 학습 가이드

카운트 ++ 문에서, 당신은 정말 기본 지침이 실행되는 것을 제어 할 수 없습니다. 대부분의 Java 런타임 환경의 JIT (Just In Time 컴파일러) 기반의 특성은 count ++ 문 이 기본 CPU 지침으로 변환 될 때 및 단일 명령으로 여러 번 끝나는 지 여부를 알 수 없음을 의미합니다. . 성명이 명령을 실행 멀티 스레딩의 측면에서 자바 바이트 코드에 여전히 JIT에 의해 네이티브 CPU 명령으로 변환하거나 경우

내 질문은 다른입니까?

스레드가 네이티브 CPU 명령어 레벨이 아닌 네이티브 CPU 명령어 레벨에서 작동한다는 인상을받습니다. 따라서 JIT가 메소드를 네이티브 CPU 명령어로 변환하더라도 로우 레벨 스레드는 결국 네이티브 CPU 명령어를 실행합니다 번역 된 바이트 코드 그렇다면 이것은 JIT가 해당 코드를 원시 CPU로 변환하는지 여부와 별도로 최종적으로 스레드가 원시 cpu 명령과 작동하므로 견적이 잘못되었음을 의미합니다. 예를 들어

, 경우 ++, void example(){int c=0;c++;}에서 ++ 문은 바이트 코드 1 개 지시하지만, 기본 CPU에 3 개 지침이며, JIT는 네이티브 CPU 명령에 방법 예를 번역하고, T는 문에 c 실행 스레드하지 않습니다 c를 해당 명령문은 바이트 코드 명령어 (1 명령어) 또는 기본 CPU (3 명령어)로 실행됩니까?

누구나 내가 원하는 주제에 관한 자료를 제공 할 수 있습니까?

+0

그래서 질문은 concarency 속성이 ona에 따라 변경됩니다. – user140547

+1

질문을 이해할 수 없습니다. CPU는 네이티브 명령만을 실행하므로 JIT 또는 JIT가 아닌 바이트 코드는 항상 네이티브 명령으로 변환됩니다. MT의 문맥에서 'C++'이 하나의 명령어 (x86에서'inc DWORD [rbp]'라고 말함)로 번역 되더라도 그것은 원자 성과 주문을 보장하지 않으므로 MT의 건전성은 명령어의 수와 관련이 없습니다. –

+0

영어를 이해하기 어렵습니다. 그리고 당신의 질문은 틀린 가정으로 가득차있는 것처럼 보입니다. 그래서 당신이 실제로 원하는 것을 이해하는 것을 더욱 어렵게 만듭니다. 예 : * "JIT는 메소드를 바이트 코드로 변환합니다"*는 바이트 코드가 JIT에 의해 생성되지만이를 소비한다는 것을 의미하므로 나머지 가정은 잘못된 가정에 기초를두고 있기 때문에 의미가 없습니다. – the8472

답변

0

견적이 맞습니다. 네이티브 명령어가 실행되는 것을 제어 할 수는 없습니다. 많은 아키텍처와 VM 유형이 있으며 모든 유형에 대해 확신 할 수 없습니다.

특정 경우의 바이트 코드는 궁금하신 경우 -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly 및 기타 Diagnostic flags을 사용해보세요.