아시다시피 Java 코드는 JVM에 의해 컴파일되고 해석됩니다. 제 질문은 최적화를 다루고 있습니다 : JVM에 의해서만 또는 컴파일시에 최적화되어 있습니까?효율적인 Java 코드를 작성하는 방법은 무엇입니까?
효율적인 코드를 작성하려면 지원되는 최적화 목록을 어디에서 찾을 수 있습니까? 또는 JVM 최적화가 충분히 강력하여 속도 성능에 관계없이 읽기 쉽고 유지하기 쉬운 코드를 작성해야합니다.
아시다시피 Java 코드는 JVM에 의해 컴파일되고 해석됩니다. 제 질문은 최적화를 다루고 있습니다 : JVM에 의해서만 또는 컴파일시에 최적화되어 있습니까?효율적인 Java 코드를 작성하는 방법은 무엇입니까?
효율적인 코드를 작성하려면 지원되는 최적화 목록을 어디에서 찾을 수 있습니까? 또는 JVM 최적화가 충분히 강력하여 속도 성능에 관계없이 읽기 쉽고 유지하기 쉬운 코드를 작성해야합니다.
대부분의 최적화는 JVM에 의해 수행됩니다. 일반적으로 컴파일 타임보다 JIT 레벨 최적화의 범위가 더 넓습니다. 실제로 "최적화"플래그는 javac
에서 제외되었습니다. 일부 "최적화"가 실제로 실제 성능을 손상시키는 것으로 밝혀 졌기 때문에.
일반적으로 (이는 Java뿐만 아니라 많은 언어/플랫폼에 적용됩니다.) :
n
만 처리하면 이론적으로 더 우수한 알고리즘이 일정한 요인으로 인해 느려지 게됩니다.)필자는 가정 된 최적화에 대한 가독성과 유지 보수성을위한 코드 작성을 분명히 선택합니다.
조숙 한 최적화는 일반적으로 나쁜 것으로 간주됩니다. http://en.wikipedia.org/wiki/Optimization_(computer_science)#When_to_optimize
물론 프로파일 링 도구를 사용하여 병목 현상을 측정하고 증명하는 것은 다른 문제입니다. 이렇게하면 최적화가 필요한 영역이 있다는 것을 증명할 수 있으며 그 결과 혜택을 측정 할 수 있습니다.
Java HotSpot JIT 컴파일러는 "핫스팟"을 감지하고 코드를 실행하면 더 나은 성능을 제공합니다. 그것에 대해 읽어보십시오 here.
한편, 효율적인 코드를 작성하려면 Robert Simmons의 "Hardcore Java"또는 Brian Goetz의 "Java Concurrency in Practice"과 같은 책을 읽으십시오.
"Hardcore Java"가 아닌 "Hardcore Java"입니다 – Kai
런타임시 JVM 또는 컴파일 타임에 최적화 되었습니까?"최적화"바이트 코드를 최적화 할 수있는 JIT 컴파일러의 기능을 방해 할 수 있기 때문에
자바 컴파일러는 일반적으로 (떨어져 compund 리터럴을 해결에서) 거의 최적화를 할 - 그리고 정말 중요한 곳이다.
또는 JVM 최적화는 그냥 속도에 관계없이 공연의 유지 에 읽을 수있는 쉽고 코드를 작성해야 충분히 있도록 강력한입니까?
그것은 (이것은 확실히 요인이다하지만) 당신보다 더 나은 최적화하기 위해 JVM 신뢰의 문제가 아니라 코드가 실행되지 않기 때문에, 그것은 최적화는 시간의 95 %를 완전히 무관되는 질문은,이다 자주. 코드의 일부가 앱 실행 시간의 0.1 %를 차지하는 경우 귀찮은 일이 아닙니다. 100 배나 빨리 할 수 있다고해도 아무 것도 얻지 못합니다. 그리고 이것은 가장 일반적인 경우입니다.
뻔뻔스럽게 바보 같은 일을 피하는 한, 구체적인 성능 문제가 발생할 때까지 최적화를 잊어 버리고 프로파일 러에서 코드의 핫스팟 인 코드 조각 만 정확하게 최적화해야합니다.
특정 JVM 최적화에 대해 걱정하지 마십시오. 세부 정보는 버전마다 다릅니다.
조쉬 블로흐 (Josh Bloch)의 "Effective Java"책 구입 -이 항목에 대한 최고의 책입니다.
안녕하세요, sdiz, 만나서 반가워요. :) – Bombe
이러한 팁은 Google Android의 특정 Java 구현을위한 것이지만 these Google Android performance tips은 "일반"JVM에도 적용됩니다. 안드로이드의 자바는 내가 아는 한 런타임에 코드를 최적화하지 않는다.
JVM 최적화가 버전마다 변경됩니다.
Sun JVM을 사용한 초기 프로파일 링의 경우 "jvisualvm"을 사용하십시오. 실행중인 프로세스에 연결할 수있는 NetBeans 프로파일 러의 독립 실행 형 버전입니다. –
(이클립스 용 VisualVM 런처 플러그인이 있습니다.) –