2016-10-03 2 views
-6

다음 중 가장 효율적인 것은 무엇입니까? 감사 -이들 중 Java에서 더 효율적인 것은?

int x = 1, y = 2; 
System.out.print(x+y) 

또는 ...

int x = 1, y = 2, z = 3; 
System.out.print(z); 

나는 그것이 첫 번째,하지만 확실 같은데요.

+8

차이점은 문자 그대로 중요하지 않습니다. –

+3

만약 당신이 그 둘 사이의 문자 적으로 나노초의 차이에 대해 걱정한다면, 당신은 잘못된 것을 최적화하고있는 것입니다 ... –

+4

"효율적"을 정의하십시오. 더 빠른 실행 시간? 메모리 공간이 적습니까? 그 결과 작은 바이트 코드? 다른 것? 당신이 당신의 기준에 맞는 것을 실행하고 프로파일 링 할 때? – David

답변

-4

계산을 위해 메모리가 필요하지 않으므로 두 번째 옵션이됩니다. 숫자를 함께 인쇄하는 대신 인쇄하는 것입니다.

이 간단한 예, 그래서 성능이이 수준에 띄지 않습니다 ..

좋은 방법은 서로 다른 기능을 적절하게 작업을 할당하는 것입니다.

+2

증거는 어디에 있습니까? – nhouser9

5

실제 대답은 다음과 같습니다. 효율이 인 경우에는 모두이 아닙니다.

자바 프로그램의 전반적인 성능과 효율성은 바이트 코드를 기계 코드로 바꾸기 위해 JIT가 시작되는시기/방법과 같은 많은 요인에 의해 결정됩니다.

이러한 미묘한 점에 대해 걱정하지 않아도 의미 있고 유지 관리가 가능한 "좋은 OO"디자인을 만드는 데 도움이되지 않습니다. 지옥; 귀하의 경우에는 문맥에 따라 컴파일러가 상수 폴딩 을 수행하고 전체를 println (3)으로 바꿀 수도 있습니다 (이러한 변수를 버리는 것은 정말 간단합니다). 두 경우 모두 컴파일러는 정확히 동일한 바이트 코드를 생성합니다.

제 말은 잘못되었습니다. 컴파일러, JVM 및 JIT가하는 일은 묻는 것이 좋습니다. 하지만 : "B보다 효율적"으로 쉽게 분류 할 수 있다고 가정하지 마십시오.

+1

동의 및 +1. 이를 추가하기 위해 프로그래머가 아닌이 수준에서 작업을 최적화하는 것이 컴파일러의 임무입니다. 프로그래머 최적화는 알고리즘 수준에서 이루어져야합니다. – nhouser9

+0

방금 ​​배우기 시작 했으므로 모범 사례를 찾고 있습니다. 따라서 모든 답변을 평가하고 관련 상황에서 모든 제안을 고려하므로 감사하겠습니다. – Jamie

+0

@Jamie Thats fair. 그리고 나는 이미 그 방향으로 나의 질문을 업데이트했다. – GhostCat

1

그런 모든 리터럴 값을 제공 한 경우를 진정으로 의미하는 경우 적어도 코드가 JIT 컴파일 된 후에는 차이가 전혀 존재하지 않습니다. 두 경우 모두 런타임시 계산이 0이됩니다. JIT 컴파일러는 결과를 확인하고 모든 사용 사이트에 하드 코딩합니다. 관련된 최적화 기법은 Constant Propagation과 Constant Folding입니다.

관련 문제