이 안드로이드 플랫폼에서 상대적으로 무거운 영향 (과 달빅 VM을 실행 더 speciffically 휴대 전화와 instanceof
키워드 곰? 내가 instanceof
을 생각하지 않는다영향
영향
답변
는 곰 않는 달빅 VM에 무거운 영향은 JVM에 반대했다. 당신이 어떤 의심이있는 경우가 DDMS를위한 도구로서 표준으로 제공 할당 추적기라는 도구를 사용하여 응용 프로그램을 실행할 때, 당신이 직접 볼 수
.
덕분에 도움이되었습니다. – Michiel
발견되었습니다. hat instanceof는 대부분 빠릅니다 (약 60-85 %). 그러나 전화가 배경 활동 (예 : GC, 터치, 버튼, 흔들기 등)으로 표시되지만 인스턴스의 시간이 50 % 이상으로 빠르게 유지되는 경우이 비율이 떨어집니다. 사이클 수가 매우 크게되면 (즉,> 1000000) 인스턴스가 거의 항상 빠릅니다. 두 개의 while 루프가 표시되는 순서 (즉, instanceof 루프 다음에 필드 검사 루프)는 결과에 영향을 미치지 만 인스턴스는 가장 빠릅니다.
AbstractParticle circleParticle = new CircleParticle();
int cycles = 100000
long now1 = System.currentTimeMillis();
int i = 0;
while(i<cycles) {
if(circleParticle instanceof CircleParticle) {
i++;
}
}
long timetaken1 = (System.currentTimeMillis()-now1);
long now2 = System.currentTimeMillis();
int j = 0;
while(j<cycles) {
if(circleParticle.type == AbstractParticle.TYPE_CIRCLE) {
j++;
}
}
long timetaken2 = (System.currentTimeMillis()-now2);
if(timetaken1 < timetaken2) {
type1won++;
}
else if(timetaken2 < timetaken1){
type2won++;
}
Log.d("instanceof test","type 1 favoured : "+((float)type1won/(type1won+type2won)));
당신의 sameple은 말도 안되며, i와 j는 루프 이후에 사용되지 않으므로 실행중인 코드에서 루프가 생략되어 실행시 코드가 생략 될 가능성이 높습니다. –
현명한 발언, 나는 그것을 점검해야한다. 고맙습니다. 그렇다면 질문에 대한 답이 생깁니다 : 어떻게주기가 빨라지 는가, 어떻게 '주기'가 늘어 났을 때 시간이 길어 졌는지. 앞으로 테스트를 작성할 때 내가 지적한 것을 기억할 것입니다. – Michiel
왜 Java와 반대되는 Android에서 더 큰 영향을 미칩니 까? –
Anthony, 완전히 다른 VM이기 때문에 스택 기반이 아닌 레지스터 기반입니까? –
instanceof가 휴지통을 만드는 이유는 무엇입니까? instanceof는 객체가 메서드 호출이나 객체 생성을 포함하지 않는 일부 유형의 인스턴스인지 여부를 테스트합니다. 왜 말도 안되는 관련이없는 VM 개념에 합류하여 말도 안되는 질문을하는 이유는 무엇입니까? –