2011-05-12 6 views
6

이유는 무엇입니까, 밀리 세컨드 또는 플롭 단위의 프로세서 작동이 얼마나 비싼가요? 나는 "instanceof"에서 intrested 것입니다, 캐스트 (나는 그들이 매우 비싸다는 말을 들었다).Java에서의 작업 비용

이에 대한 연구가 있습니까?

+1

이것은 VM 구현 및 기본 프로세서 아키텍처 및 잠재적으로 다른 사항에 따라 다릅니다. –

답변

8

사용하는 JVM에 따라 다르며 JIT가 수행 한 정확한 상황과 최적화 정도에 따라 동일한 JVM 내에서도 많은 작업 비용이 달라질 수 있습니다.

예를 들어 가상 메소드 호출은 Hotspot JIT에 의해 인라인 될 수 있습니다 (다른 메소드에 의해 대체되지 않는 한). 어떤 경우에는 서버 JIT를 사용하여 까지 인라인 할 수 있으며 최대 두 가지 유형의 빠른 유형 테스트가 가능합니다.

기본적으로 JIT는 충분히 복잡하기 때문에 질문에 대해 의미있는 일반적인 대답을 얻지 못할 수 있습니다. 자신의 구체적인 상황을 실제 세계에서 가능한 한 벤치마킹해야합니다. 보통 코드는 간명하고 가독성을 주 목표로 작성하십시오. 그러나 성능을 정기적으로 측정하십시오.

6

카운팅 지침 또는주기가 모든 코드 실행에서 많은 최적화가 이루어짐에 따라 일부 코드의 성능에 대해 좋은 아이디어를 줄 수있는 시간은 오래 가지 않았습니다.

이것은 VM 기반 언어의 경우 , 특히입니다. JVM은 필요하지 않다는 것을 알고 있기 때문에 일부 단계를 건너 뛸 수 있습니다.

예를 들어, 나는이 두 가지 방법이 비용면에서 꽤 비슷하다는 기사를 찾아 보았습니다. (바로 HotSpot JVM에서) :

public void frobnicate1(Object o) { 
    if (!(foo instanceof SomeClass)) { 
    throw new IllegalArgumentException("Oh Noes!"); 
    } 
    frobnicateSomeClass((SomeClass) o); 
} 

public void frobnicate2(Object o) { 
    frobnicateSomeClass((SomeClass) o); 
} 

분명히 첫 번째 방법 수행 더 많은 작업, 하지만 JVM을 o의 종류가 이미 if에서 확인 된 사실은 이후에 캐스트 유형-확인하고을를 건너 뛸 수 있습니다 것을 알고있다 아니야.

이 최적화 및 다른 많은 최적화 작업으로 "플립"또는 사이클을 거의 쓸모 없게 만들 수 있습니다.

일반적으로 instanceof 수표는 비교적 저렴합니다. HotSpot JVM에서는 객체 헤더에있는 유형 ID의 숫자 검사로 귀결됩니다.

This classic article은 "덤 (Dumb) 코드 작성"이 필요한 이유를 설명합니다.

how instanceof is optimized in the HotSpot JVM을 설명하는 2002 년 기사도 있습니다.

3

일단 JVM이 예열되면 대부분의 작업을 나노 초 (백만 분의 1 초)로 계산할 수 있습니다. 비용이 많이 드는 것에 대해 이야기 할 때 일반적으로 대안과 비교하여 비용이 비싸다고 말합니다. 그 다음은 모든 경우에 비싼 것으로 설명하기 불가능합니다.

일반적으로 가장 중요한 비용은 시간 (및 팀의 다른 개발자)입니다. instanceof을 사용하면 개발 및 코드 지원 시간이 많이 걸릴 수 있습니다. 이는 종종 잘못된 디자인을 나타 내기 때문입니다. 적절한 OOP 기술을 사용하는 것이 일반적으로 더 좋습니다.instanceof이 가질 수있는 10 나노 초는 일반적으로 비교적 사소합니다.

1

CPU 내부에서 수행되는 특정 작업의 비용은 성능에 거의 영향을주지 않습니다. 성능이 좋지 않다면 거의 항상 IO (네트워크, 디스크) 또는 비효율적 인 코드 때문입니다. 효율적인 코드를 작성하는 것은 "비용이 많이 드는"작업 (IO와 같이 비용이 많이 드는 순서를 제외하고)을 피하는 대신 전체적인 작업량을 줄이는 방법을 찾는 것에 훨씬 더 가깝습니다.