2017-04-21 1 views
-1

예를 들어, 현미경으로 코드를 볼 때이 첫 번째 코드 블록이 두 번째 코드 블록보다 많은 계산 시간을 사용합니까?Java 8 - 많은 방법을 사용하기 위해 더 많은 리소스를 사용합니까?

코드 블록 1 :

method1() { 
do something; 
call method2; 
} 
method2() { 
do something simple like assign a variable value; 
} 

코드 블록 2 :

method1(){ 
do something; 
do something simple like assign a variable value; 
} 

아주 간단하지만 내가 여기 사람이 값이 고려에 무엇을 알고 있는지 확인하기 위해 찾고 있어요 (예를 들면 최적화 최소의 계산 시간을위한 프로그램).

예를 들어, 회로의 게이트에는 설계시 클록 속도를 고려할 때 회로가 가질 최대 지연을 더할 수있는 유한 델타 지연이 있음을 알게되었습니다. Java는 델타 지연과 비슷한 것을 가지고 있습니까?

+12

벤치 마크를 통해 가장 중요한 성능 문제임을 증명할 때까지는 걱정하지 않아도됩니다. JIT는 더 나은 것으로 판단되면 메소드를 인라인합니다. 읽기 쉽고 유지 보수가 가능한 코드 작성에 집중해야합니다. –

+3

짧은 방법을 사용하여 실제로 성능을 얻을 수 있습니다. 일단 나는 아주 긴 방법을 수동으로 나누고 40 % 속도를 얻었다. JIT는 메소드를 인라인 할 수 있지만 "개요"하지는 않으므로 가독성과 성능은 종종 긍정적 인 상관 관계가 있습니다. – maaartinus

답변

6

아마도 그렇지 않을 수도 있습니다. 인라이닝이라는 프로세스를 통해 JVM은 첫 번째 코드를 마치 두 번째 코드처럼 실행할 수 있습니다. What is method inlining?

어쨌든 중요하지 않은 응용 프로그램을 작성할 때는 최소한의 성능 향상보다는 가독성과 유지 관리 용이성에 중점을 두어야합니다. 대부분의 경우, 자원 사용의 관점에서의 차이는 거의 보이지 않을 것입니다. 반면에 인간의 독자에게는 너무 많은 다른 일을하는 긴 방법이 진정한 고통이 될 수 있습니다.

4

실제로는 method2()에 무엇이 있는지와 스택에 몇 개의 매개 변수가 있는지에 따라 다릅니다. 엄지 손가락의 규칙은 코드 보전성을 줄임으로써 함께 메서드를 결합하는 것이 결코 좋은 생각이 아니며 속도면에서 드문 절약은 통계적 우연에 가깝지만 버그를 도입하거나 로직 속도가 느려질 가능성은 훨씬 높습니다.

성능에 대해 정말로 신경 쓰는 분이라면 JMH 및 마이크로 벤치마킹에 대해 배우는 것이 좋습니다. this tutorial. 그것은 매우 계시 될 것이며 시간과 함께 당신은 특정 패턴에 대해 배울 것입니다.

예. 특정 스타일로 코딩하면 데이터가 CPU 캐시에 완전하게 상주 할 수 있으므로 절대적인 최악의 경우에는 백분율 지점을 차지할 수있는 추가 메서드 호출과 비교하여 속도가 크게 향상됩니다.

관련 문제