영향

2010-02-13 4 views
9

이 안드로이드 플랫폼에서 상대적으로 무거운 영향 (과 달빅 VM을 실행 더 speciffically 휴대 전화와 instanceof 키워드 곰? 내가 instanceof을 생각하지 않는다영향

+0

왜 Java와 반대되는 Android에서 더 큰 영향을 미칩니 까? –

+4

Anthony, 완전히 다른 VM이기 때문에 스택 기반이 아닌 레지스터 기반입니까? –

+0

instanceof가 휴지통을 만드는 이유는 무엇입니까? instanceof는 객체가 메서드 호출이나 객체 생성을 포함하지 않는 일부 유형의 인스턴스인지 여부를 테스트합니다. 왜 말도 안되는 관련이없는 VM 개념에 합류하여 말도 안되는 질문을하는 이유는 무엇입니까? –

답변

3

는 곰 않는 달빅 VM에 무거운 영향은 JVM에 반대했다. 당신이 어떤 의심이있는 경우가 DDMS를위한 도구로서 표준으로 제공 할당 추적기라는 도구를 사용하여 응용 프로그램을 실행할 때, 당신이 직접 볼 수

.

+1

덕분에 도움이되었습니다. – Michiel

1

발견되었습니다. 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)));   
+1

당신의 sameple은 말도 안되며, i와 j는 루프 이후에 사용되지 않으므로 실행중인 코드에서 루프가 생략되어 실행시 코드가 생략 될 가능성이 높습니다. –

+0

현명한 발언, 나는 그것을 점검해야한다. 고맙습니다. 그렇다면 질문에 대한 답이 생깁니다 : 어떻게주기가 빨라지 는가, 어떻게 '주기'가 늘어 났을 때 시간이 길어 졌는지. 앞으로 테스트를 작성할 때 내가 지적한 것을 기억할 것입니다. – Michiel