2016-11-11 5 views
1

나는정적 방법은

public static void abc(String str) { 
    // some code 
    str = str + "s"; 
    // some code 
} 

이 방법은 동시에 100 개 스레드에 의해 호출된다고 가정 할 수있는 정적 메서드가 있습니다.

나는이 정적 메서드를 실행하기 위해 CPU가 이러한 모든 스레드를 예약한다고 생각합니다.

실행 요청을 확장 할 수 있습니다. 이제이 정적 메서드를 같은 시간에 호출하는 스레드가 약 100,000 개 있습니다.

그렇다면 성능상 오버 헤드가 발생합니다 (이 메서드가 클래스의 멤버 인 경우와 비교). 나 맞아?

+3

까지 차이를 초과 할 스레드 컨텍스트 스위칭 비용을 호출 비 정적 메소드 VS 정전기로 인한 비 정적 대 정적이다. –

+1

나는 당신이 무엇을 암시하고 있는지 알지 못합니다. _what_의 성능이 정확히 일치합니까? 인스턴스 메소드와 정적 메소드를 호출하는 것과 다른 점은 무엇입니까? –

+0

@MarkoTopolnik 메모리에 클래스의 정적 메서드 인스턴스가 하나만 있습니다. 모든 스레드가이 정적 메소드를 같은 시간에 호출하는 경우 남아있는 스레드에 대한 대기 시간이있을 수 있습니다. – chaitanyam

답변

4

OS의 스케줄러의 관점에서 볼 때 메서드가 정적인지 여부는 중요하지 않습니다. 기계 수준에서 둘 다 일부 매개 변수가 포함 된 서브 루틴입니다. 따라서 두 방법이 동기화되지 않으면 차이가 없어야합니다.

5
  • 이론적으로 정적 호출은 가상 함수 조회를 수행 할 필요가 없으므로 약간 더 효율적으로 만들 수 있으며 숨겨진 "this"매개 변수의 오버 헤드도 피할 수 있습니다.
  • 실제로 많은 컴파일러가이를 최적화 할 것입니다.
  • 까지 차이를 초과 할 스레드 컨텍스트 스위칭 비용 때문에