2012-07-20 2 views
1

나는 라인을 따라 모든 라인을 처리하는 대신에 메소드를 사용하는 것이 훨씬 더 명확하다는 것을 안다. 그래서이 가정을 따로 구분 해보자.많은 메소드를 추가하여 성능을 저하시키고 있습니까?

메소드를 호출하는 것과 동일한 일을하는 것이 메소드에서 호출 할 때 더 많은 시간이 소요되는지 여부와 관계없이 생성 된 바이트 코드가 동일하다고 상상해보십시오.

답변

5

이론적으로 대부분 그렇습니다. 계산을 수행하기 위해 새 스택 프레임을 만듭니다. 실질적으로, 당신은 그 성능에 주목하지 않을 것입니다. 이 질문에 대한 전체적인 설명은 좀 더 복잡하며, 생성 된 바이트 코드와 실행중인 머신/가상 머신의 성능과 관련이 있습니다.

+0

물론 이것은 Java이므로 다른 점은 핫 스폿 인 메소드를 살펴보고이를 최적화하는 데 더 많은 시간을 소비한다는 것입니다. – Robert

1

잘 직렬 프로그램 (단계별)은 메서드를 찾는 코드를 스캔하고 실행해야하기 때문에 메서드 실행보다 빠릅니다. 그러나 이번에는 성능에 미치는 영향을 최소화하기 위해 작습니다.

2

1인자 인 오른쪽 특정 한도까지, 실행 코드라인을 포함하는 런타임 스택, 상기 로컬 변수의 생성에있어서의 결과를 호출하는 것과 프로그램 카운터 및 해당 비 정적 "다음"도 있습니다.

2. 그러나이 것은 HighSpeed ​​프로세서 및 강력한 IDE와의 영향을 미치지 않습니다.

3. 당신이 방법을 사용하지 있다 또한 경우에, 그것은 (중복 배제), 하나는 단일 분별있는 장소에있는 모든 정보와 동작을 유지해야한다고 주장하는 DRY 원칙을 위반하는 것입니다.

1

물론 코드를 모듈화하는 것이 좋습니다. 성능에서 눈에 띄는 차이가 없어야합니다.

예외. 그것은 기술로하지 말아야 할 이유 때문에 인간의 본성과 함께 아주 큰 차이를 만들 수 있습니다.

a = b + c; 

Foo(bar); 

같은 라인을보고 그들이 어떤 그들이 수도, 거의 같은 비용, 그러나 아마하지 않는 생각하는 자연입니다.

문제는 메서드가 추가 메서드 호출을 포함하여 추가 코드 용 자석이라는 점입니다.

그러면 성능 튜닝을 할 때 스택 샘플을 가져 오는 것이고, 20-30 레벨의 깊이가되는 것은 드문 일이 아닙니다. 스택 샘플에서 각 호출을 검사하면 거의 모든 것이 완벽하게 이해됩니다.

거의.

성능을 완전히 떨어 뜨리는 데 필요한 20-30 개 중 하나만 선택하면됩니다. 스택 샘플이 2 개 밖에없는 것처럼 보이는 경우 최적화를위한 큰 기회를 찾았습니다. 예를 들어, 세 개의 샘플을 가져 와서 둘 중 두 개에서 저장할 수있는 시간의 비율이 2/3에 가깝다는 것을 알 수 있습니다. 다른 방법으로, 속도 증가 요인은 세 번 일 수 있습니다.

관련 문제