2010-06-17 6 views
3

표준 API 함수의 실행 시간을 얻을 수있는 좋은 리소스가 있습니까? 프로그램을 최적화하려고 할 때 다소 혼란 스럽습니다. 나는 자바가 특히 빠른 속도로 만들어지지는 않는다는 것을 알고 있지만, 이것에 대한 많은 정보를 찾을 수없는 것 같습니다.Java API 메소드 실행 시간

예제 문제 :파일에서 특정 토큰을 찾고있는 경우 string.contains (...)를 사용하여 각 행을 스캔하는 것이 더 빠르다거나 말하자면 100 줄 정도를 로컬 문자열에 놓는 것이 더 빠릅니다 그것들은 그 청크에 포함되어 있습니다.

+0

실행 시간은 어떤 환경입니까? –

+2

예를 들어, 두 가지 방법으로 코드를 작성하고 여러 번 테스트하여 어느 것이 더 빠르는지 확인할 수 있습니다. 나는 그동안 많은 시간을 보냈습니다. –

+3

'자바가 특히 빠르지 않다는 것을 알고 있습니다'. 네가 그 인상을 어디에서 얻었는지 나는 모른다. 썬과 다른 사람들은 가능한 한 빨리 Java를 15 년 동안 노예로 삼았습니다. – EJP

답변

5

AFAIK에는 API 메소드에 대한 표준 벤치 마크가 없으며 실제로 실행중인 JVM을 기반으로하는 다양한 구현이있을 수 있습니다. JVM의 JIT 최적화, 가비지 콜렉션 및 다른 많은 것들과 함께하면, 전 세계적으로 의미있는 숫자를 얻을 수 있을지 의심 스럽습니다. 가능한 대부분은 자신의 벤치 마크를 작성하는 것입니다.

일부 메소드는 JavaDoc에서 연산의 계산 복잡성을 지정합니다. 다른 일부 방법은 다른 성능 문제를 설명합니다. 당신이 그들을 알고 있는지 확인하고 그들을 유의하십시오.

그러나 그 외에도 대부분의 기회는 조기 최적화를 수행하고 있다는 것입니다. 프로파일 러를 사용하여 실제로 병목 현상을 확인하십시오.

예를 들어, 파일에서 읽는 비용, 큰 버퍼에 문자열을 놓는 데 드는 비용 등이 있습니다. 문자열 수준에서 읽음으로써 실제로 최적화 할 수 있는지 확신 할 수 없습니다. 이 작업이 정말로 중요한 작업이라면 문자열을 작성하지 않고 문자를 읽고 스마트 매칭 알고리즘을 구현할 수 있습니다. 약간 빨라질 수 있습니다.

+0

+1 JIT 최적화에 대해 언급 - HotSpot에 의해 인라인/최적화 된 "자연스럽게 더 느린"방법은 이론적으로 더 효율적인 방법보다 훨씬 빠를 것입니다. 그리고 이러한 최적화가 런타임 프로파일을 기반으로 이루어지기 때문에 나는 코드 지역을 믿는다. "X"가 "Y"보다 빠르다는 것을 확실하게 말할 방법이 없다. " 그리고 물론 당신이 맞습니다 - 성급하게 최적화하지 마십시오; 명확한 간결한 코드를 먼저 작성하고 * 필요한 경우 속도 *를 다시 작성하십시오. –

1

OS마다 OS마다 매우 다를 수 있으므로 문서가 없습니다. 프로그램의 정확한 타이밍을 얻으려면 profiler을 사용하십시오. NetBeans 프로파일 러가 좋습니다.

어느 것이 가장 빠르는지에 관해서는 두 가지를 모두 코딩하는 것이 더 좋은 대안은 없습니다. 또는 가장 간단한 대안을 코딩 할 수 있으며 작동 중일 때 필요에 따라 충분히 빠르며 복잡한 구현을 코딩하지 않아도됩니다. 내가 제대로 질문을 이해한다면

3

당신은 어디에서 라인을 읽고, 또는 메모리에서 라인을 읽기 위해 더 나은 경우가 묻는 profiler

1

찾고 있습니다. 스캔을 수행하기 위해 텍스트를 메모리에로드 한 다음 I/O 스트림 (특히 디스크)에서 읽는 것이 더 빠를 것입니다. 읽기 속도는 Java와는 아무런 관련이 없지만 소스가 얼마나 빨리 프로그램에 데이터를 가져올 수 있는지를 나타냅니다.

1

프로파일 러 사용에 대한 아이디어에 동의합니다. 그러나 log4j (또는 Apache Commons Logging 등)를 사용하여 프로그램 성능에 대한 저렴한 통계를 얻는 것도 고려할 수 있습니다. 결과 로그 파일의 로그 항목이 가장 가까운 밀리 초 단위로 타임 스탬프가 지정됩니다. 일반적으로 로깅은 디버깅 할 때 일반적으로 유용하기 때문에 먼저 수행해야 할 가치가 있습니다.

프로파일 링 도구를 배우고 그 결과 데이터를 해석하는 방법은 일반적으로 그다지 중요하지 않은 작업이지만, 로깅 데이터를 사용하면 더 빨리 대략적인 아이디어를 얻을 수 있습니다. 특히 형식을 지정하는 경우 그것은 CSV 등 그래서 스프레드 시트로 가져옵니다.

1

디스크 IO 시간을 간과하고 코드에서 소비 한 CPU 시간을 고려하면 두 번째 선택 항목이 첫 번째 선택 항목보다 훨씬 느립니다.

관련 문제