2009-06-03 10 views
14

아시다시피 Java 코드는 JVM에 의해 컴파일되고 해석됩니다. 제 질문은 최적화를 다루고 있습니다 : JVM에 의해서만 또는 컴파일시에 최적화되어 있습니까?효율적인 Java 코드를 작성하는 방법은 무엇입니까?

효율적인 코드를 작성하려면 지원되는 최적화 목록을 어디에서 찾을 수 있습니까? 또는 JVM 최적화가 충분히 강력하여 속도 성능에 관계없이 읽기 쉽고 유지하기 쉬운 코드를 작성해야합니다.

답변

30

대부분의 최적화는 JVM에 의해 수행됩니다. 일반적으로 컴파일 타임보다 JIT 레벨 최적화의 범위가 더 넓습니다. 실제로 "최적화"플래그는 javac에서 제외되었습니다. 일부 "최적화"가 실제로 실제 성능을 손상시키는 것으로 밝혀 졌기 때문에.

일반적으로 (이는 Java뿐만 아니라 많은 언어/플랫폼에 적용됩니다.) :

  • 가능하면 읽고 유지할 수있는 코드를 작성하십시오. 당신은 항상 당신의 아키텍처 수행하기에 성능
  • 넣어 노력을 측정 할 수 있도록
  • 성능 목표와 기준을 가지고; (구현 변경과 비교하여) 나중에 변경하기가 어렵습니다.
  • "10 % 더 빠르게"보다 알고리즘의 복잡성 측면에서 성능을 더 고려하십시오. O (n^2)에서 O (n) 로의 변경은 일반적으로) 훨씬 더 중요합니다. (실제로는 실제 사용량에 따라 달라집니다. 작은 값인 n 만 처리하면 이론적으로 더 우수한 알고리즘이 일정한 요인으로 인해 느려지 게됩니다.)
  • 프로파일이 이러한 최적화 후
  • 측정을하고 가치 제안 때 병목 현상 가독성의 비용
  • 만 마이크로 최적화 위치를 확인하기 위해 프로파일 러를 사용하여 - 당신이 실제로 한 큰 영향이 없을 수 있으며,이 경우에 롤백
+2

Sun JVM을 사용한 초기 프로파일 링의 경우 "jvisualvm"을 사용하십시오. 실행중인 프로세스에 연결할 수있는 NetBeans 프로파일 러의 독립 실행 형 버전입니다. –

+0

(이클립스 용 VisualVM 런처 플러그인이 있습니다.) –

4

필자는 가정 된 최적화에 대한 가독성과 유지 보수성을위한 코드 작성을 분명히 선택합니다.

조숙 한 최적화는 일반적으로 나쁜 것으로 간주됩니다. http://en.wikipedia.org/wiki/Optimization_(computer_science)#When_to_optimize

물론 프로파일 링 도구를 사용하여 병목 현상을 측정하고 증명하는 것은 다른 문제입니다. 이렇게하면 최적화가 필요한 영역이 있다는 것을 증명할 수 있으며 그 결과 혜택을 측정 할 수 있습니다.

5

Java HotSpot JIT 컴파일러는 "핫스팟"을 감지하고 코드를 실행하면 더 나은 성능을 제공합니다. 그것에 대해 읽어보십시오 here.

한편, 효율적인 코드를 작성하려면 Robert Simmons의 "Hardcore Java"또는 Brian Goetz의 "Java Concurrency in Practice"과 같은 책을 읽으십시오.

+0

"Hardcore Java"가 아닌 "Hardcore Java"입니다 – Kai

3

런타임시 JVM 또는 컴파일 타임에 최적화 되었습니까?"최적화"바이트 코드를 최적화 할 수있는 JIT 컴파일러의 기능을 방해 할 수 있기 때문에

자바 컴파일러는 일반적으로 (떨어져 compund 리터럴을 해결에서) 거의 최적화를 할 - 그리고 정말 중요한 곳이다.

또는 JVM 최적화는 그냥 속도에 관계없이 공연의 유지 에 읽을 수있는 쉽고 코드를 작성해야 충분히 있도록 강력한입니까?

그것은 (이것은 확실히 요인이다하지만) 당신보다 더 나은 최적화하기 위해 JVM 신뢰의 문제가 아니라 코드가 실행되지 않기 때문에, 그것은 최적화는 시간의 95 %를 완전히 무관되는 질문은,이다 자주. 코드의 일부가 앱 실행 시간의 0.1 %를 차지하는 경우 귀찮은 일이 아닙니다. 100 배나 빨리 할 수 ​​있다고해도 아무 것도 얻지 못합니다. 그리고 이것은 가장 일반적인 경우입니다.

뻔뻔스럽게 바보 같은 일을 피하는 한, 구체적인 성능 문제가 발생할 때까지 최적화를 잊어 버리고 프로파일 러에서 코드의 핫스팟 인 코드 조각 만 정확하게 최적화해야합니다.

0

특정 JVM 최적화에 대해 걱정하지 마십시오. 세부 정보는 버전마다 다릅니다.

조쉬 블로흐 (Josh Bloch)의 "Effective Java"책 구입 -이 항목에 대한 최고의 책입니다.

+0

안녕하세요, sdiz, 만나서 반가워요. :) – Bombe

1

이러한 팁은 Google Android의 특정 Java 구현을위한 것이지만 these Google Android performance tips은 "일반"JVM에도 적용됩니다. 안드로이드의 자바는 내가 아는 한 런타임에 코드를 최적화하지 않는다.

-1

JVM 최적화가 버전마다 변경됩니다.

관련 문제