arg = args [n ++]는 이전 컴파일러에서 2 개의 별도 명령문보다 더 효율적인 이유는 무엇입니까? 책 "급한위한 핵심 자바"장 "증가 및 감소 연산자"에서
문자열 인수 = 인수 [N ++]
은 args [n]에 arg를 설정 한 다음 n을 증가시킵니다. 이것은 컴파일러가 코드를 최적화하는 일을 잘하지 못했을 때 30 년 전부터 년 전에 의미가있었습니다. 요즘에는 두 개의 서로 다른 문을 사용하는 경우 성능이 저하되는 단점이이고 많은 프로그래머는 을 쉽게 읽을 수있는 형식을 찾습니다.
나는 이러한 증분 및 감소 연산자의 사용은 더 적은 코드를 작성하기 위해서만 사용되었다고 생각했지만이 인용문에 따르면 과거에는 그렇지 않았습니다.
String arg = args[n++]
과 같은 문장을 작성하면 성능상의 이점은 무엇입니까?
플랫폼에 따라 다르지만 java-VM과 같은 인터프리터의 경우 동일한 객체 (증가 된 변수)에 대한 액세스가 두 번 수행 될 수 있습니다. 일부 CPU 명령어는 바로 가기를 제공하므로 CPU가 현재 병렬화되고있는 것은 말할 것도없고 한 번에 두 가지 작업을 수행 할 수 있습니다. – Swift
"고대"시대 (현재는 여전히)에는 레지스터를 하나씩 증가 및 감소시키는 CPU 명령어가 있습니다. 특히 상위 수준의 프로그래밍 언어에서 비슷한 "지침"을 사용하는 것이 좋습니다. 특히 대부분의 프로그래머가 낮은 수준의 배경에서 왔을 때 CPU 명령의 증가/감소에 대해 알았습니다. 또한 뭔가를 높이거나 낮추는 일반적인 개념을 이해하기 쉽기 때문에 이러한 코드를 사용하면 쉽게 이해할 수있는 반면에 간결성이 높아집니다. –
@ 프로그래머가 자바에서 각 변수는 OOP 객체입니다. 변수의 값을 읽는 작업이라 할지라도 증분 또는 ANY 수학 연산을 서브 클래 싱 할 수 있습니다. C와는 반대로 C 코드는 어셈블러 코드와 거의 직접적인 유사점입니다. 질문은 VM이 Java 바이너리의 의사 코드를 CPU 명령어로 해석하고 \ 컴파일하는 방법입니다 – Swift