저는 고성능 Android 애플리케이션 (게임)을 제작하고 있습니다. 우선 가독성을 위해 코드를 작성하려고 노력하지만 후드에서 일어나는 일을 내 마음 속에 간직하고 있습니다. C++에서는 컴파일러가 나를 위해 무엇을 할 것인지,하지 않을 것인지에 대해 상당히 좋은 직관을 개발했습니다. Java/Android에서도 동일한 작업을 수행하려고합니다.Dalvik 및 Android 툴체인에서 어떤 최적화가 이루어질 수 있습니까?
따라서이 질문은 웹에서이 주제에 관해서는 거의 알 수 없습니다. Java 컴파일러 Dalvik 변환기 (dx) 및/또는 JITter (Android 2.2 이상)는 다음과 같은 최적화를 수행합니까?
메소드 인라이닝. 어떤 조건에서?
private
메서드는 항상 안전하게 인라인 될 수 있습니다. 이 일을 끝내겠습니까? 방법에 대해public final
방법은 어떨까요? 다른 클래스의 객체에 대한 메소드?static
방법? 컴파일러가 객체의 런타임 유형을 쉽게 추론 할 수 있다면 어떨까요? 가능하다면 메소드를final
또는static
으로 선언해야합니까?일반 하위 표현식 제거. 예를 들어
someObject.someField
에 두 번 액세스하면 조회가 한 번만 수행됩니까? 게터를 부르면 어떡하지? 어떤 산술 표현식을 두 번 사용하면 어떨까요? 한 번만 평가 되나요? 어떤 식의 결과를 사용하면, 값이 변경되지 않는다고 알고 있는데, 이는for
루프의 상한입니까?범위 조회에서 경계를 확인합니다. 툴체인은 특정 조건에서 루프를 제거합니까 (예 :
for
원형)?값 인라이닝.
public static final int
에 대한 액세스는 항상 인라인됩니까? 그들이 다른 학급에 있더라도? 그들이 다른 패키지에 있어도?분기 예측. 이것도 얼마나 큰 이슈입니까? 일반적인 Android 기기에서 분기 성능이 큰가요?
간단한 산술. 으로 대체 되나요?
이렇게요 ...
유용 할 수 있습니다. http://developer.android.com/guide/practices/design/performance.html – pablochan
다음은 유용 할 수도 있습니다. http://www.netmite.com/android/mydroid/dalvik/ docs/dexopt.html, http://www.taranfx.com/android-internals-jit-froyo 및 프리젠 테이션의 pdf 버전 : http://www.android-app-developer.co.uk/android- app-development-docs/android-jit-compiler-androids-dalvik-vm.pdf – Lior
@pablochan : 잠시 동안 베개 밑에 있었지만 감사합니다 :) @Lior : 좋은 참조, 저에게 새로운 것입니다. 감사합니다. ! – Thomas