나는 라인을 따라 모든 라인을 처리하는 대신에 메소드를 사용하는 것이 훨씬 더 명확하다는 것을 안다. 그래서이 가정을 따로 구분 해보자.많은 메소드를 추가하여 성능을 저하시키고 있습니까?
메소드를 호출하는 것과 동일한 일을하는 것이 메소드에서 호출 할 때 더 많은 시간이 소요되는지 여부와 관계없이 생성 된 바이트 코드가 동일하다고 상상해보십시오.
나는 라인을 따라 모든 라인을 처리하는 대신에 메소드를 사용하는 것이 훨씬 더 명확하다는 것을 안다. 그래서이 가정을 따로 구분 해보자.많은 메소드를 추가하여 성능을 저하시키고 있습니까?
메소드를 호출하는 것과 동일한 일을하는 것이 메소드에서 호출 할 때 더 많은 시간이 소요되는지 여부와 관계없이 생성 된 바이트 코드가 동일하다고 상상해보십시오.
이론적으로 대부분 그렇습니다. 계산을 수행하기 위해 새 스택 프레임을 만듭니다. 실질적으로, 당신은 그 성능에 주목하지 않을 것입니다. 이 질문에 대한 전체적인 설명은 좀 더 복잡하며, 생성 된 바이트 코드와 실행중인 머신/가상 머신의 성능과 관련이 있습니다.
잘 직렬 프로그램 (단계별)은 메서드를 찾는 코드를 스캔하고 실행해야하기 때문에 메서드 실행보다 빠릅니다. 그러나 이번에는 성능에 미치는 영향을 최소화하기 위해 작습니다.
1 내 인자 인 오른쪽 특정 한도까지, 실행 코드의 라인을 포함하는 런타임 스택, 상기 로컬 변수의 생성에있어서의 결과를 호출하는 것과 프로그램 카운터 및 해당 비 정적 "다음"도 있습니다.
2. 그러나이 것은 HighSpeed 프로세서 및 강력한 IDE와의 영향을 미치지 않습니다.
3. 당신이 방법을 사용하지 있다 또한 경우에, 그것은 (중복 배제), 하나는 단일 분별있는 장소에있는 모든 정보와 동작을 유지해야한다고 주장하는 DRY 원칙을 위반하는 것입니다.
물론 코드를 모듈화하는 것이 좋습니다. 성능에서 눈에 띄는 차이가 없어야합니다.
예외. 그것은 기술로하지 말아야 할 이유 때문에 인간의 본성과 함께 아주 큰 차이를 만들 수 있습니다.
이
a = b + c;
및
Foo(bar);
같은 라인을보고 그들이 어떤 그들이 수도, 거의 같은 비용, 그러나 아마하지 않는 생각하는 자연입니다.
문제는 메서드가 추가 메서드 호출을 포함하여 추가 코드 용 자석이라는 점입니다.
그러면 성능 튜닝을 할 때 스택 샘플을 가져 오는 것이고, 20-30 레벨의 깊이가되는 것은 드문 일이 아닙니다. 스택 샘플에서 각 호출을 검사하면 거의 모든 것이 완벽하게 이해됩니다.
거의.
성능을 완전히 떨어 뜨리는 데 필요한 20-30 개 중 하나만 선택하면됩니다. 스택 샘플이 2 개 밖에없는 것처럼 보이는 경우 최적화를위한 큰 기회를 찾았습니다. 예를 들어, 세 개의 샘플을 가져 와서 둘 중 두 개에서 저장할 수있는 시간의 비율이 2/3에 가깝다는 것을 알 수 있습니다. 다른 방법으로, 속도 증가 요인은 세 번 일 수 있습니다.
물론 이것은 Java이므로 다른 점은 핫 스폿 인 메소드를 살펴보고이를 최적화하는 데 더 많은 시간을 소비한다는 것입니다. – Robert