문제

나는 이것을 잠시 동안 궁금해했다. 정답을 뒷받침하기 위해 정량적 데이터를 제공하십시오.

관련 : Windows, Mac 및 Linux JVM 성능간에 큰 차이가 있습니까?

도움이 되었습니까?

해결책

Shudo는 비교를했습니다 Linpack, Scimark 등과 같은 Microbenchmark의 소스 코드를 출시합니다.

Linpack의 샘플 결과 :

alt text
(원천: Shudo.net)

그러나 마지막 업데이트는 5 년 전에 .net v1.0 또는 v1.1을 사용하고 대부분 JVM v1.4를 사용했습니다. 즉, Java와 .NET 모두에서 몇 가지 릴리스가 가능합니다. 소스를 얻고 자신의 결과를 생성 할 수 있습니다.


방금이 작업을 수행했습니다. 다운로드 된 Linpack.java 및 Linpack.cs, 컴파일되어 실행했습니다. Sun에서 Java V1.6.0.11, Microsoft의 C# 3.0 (3.5 컴파일러)을 사용했습니다. 둘 다 Windows Vista에서.

Linpack 문제 크기 2000의 경우 Java 버전의 경우 17.6, C# 버전의 경우 17.78을 얻었습니다.

그런 다음 다시 실행하고 Java의 경우 18.14를, C#은 17.31을 얻었습니다.


무엇을 측정하고 있습니까?

이것은 성능 측정 및 테스트에서 몇 가지 과제를 보여줍니다.

  • 첫 번째:
    단일 시험은 의미있는 결론을 도출하기에 충분하지 않습니다. 일반적으로 많은 시험을 측정 한 다음 결과를 평균해야합니다.

  • 초:
    당신은 무엇을 측정하고 있습니까? 단일 문제를 해결하는 단일 시험을 실행하는 경우 프로세스 시작 비용은 시간과 JIT 시간 및 버퍼를 채우는 데 드는 비용이 포함됩니다. 이것은 당신이 실제로 측정하고 싶은 것일 수도 있고 아닐 수도 있습니다.

    많은 경우에 그것은 당신이 측정하고자하는 정상 상태입니다. 예를 들어 서버 프로세스에서 한 번 시작하면 몇 달 동안 실행됩니다. 따라서 시작 비용은 무시할 수 있으며 측정하고 최적화하려는 것은 최소 평균 응답 시간이 주어지면 요청 처리량입니다. 또는 "Fat Client"에서 원하는 것은 비디오 처리를 수행하는 데 필요한 시간이며 프로세스 시작 비용을 측정하고 싶지 않습니다.

  • 제삼:
    워크로드는 무엇입니까? Linpack과 Scimark는 플로팅 포인트 수학을 많이한다면 흥미로울 수 있습니다. 하지만 그렇지 않으면 어떨까요? 많은 XML 파쇄, 문자열 구문 분석, 정수 수학, 데이터베이스 상호 작용 또는 HTML 페이지 생성을하는 경우 어떻게해야합니까? 코드가 많은 스레드 관리를 수행하거나 Thread-Synchronization 프리미티브를 사용하는 경우 어떻게해야합니까? 커뮤니케이션과 IO는 어떻습니까? 트랜잭션의 핵심 부분이 암호화 또는 디지털 서명 생성 및 검증이라면 어떻게됩니까? 이러한 벤치 마크는 다른 시나리오에 대해 아무 말도하지 않습니다. 이런 이유로 마이크로 벤치 마크라고 할 수 있습니다.

    평가하려는 것을 올바르게 모델링하는 벤치 마크가 필요합니다.


또한보십시오:
언어 벤치 마크로서의 사소한 수학적 문제

다른 팁

체크 아웃 컴퓨터 언어 총격전. 그들은 수많은 언어와 VM을 비교합니다 모노와 JVM.

데스크탑에서 시작 속도, 메모리 및 CPU 사용을보고 있다면 이것 2010 년 7 월 현재 최신 릴리스를 사용하고 있기 때문에 도움이 될 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top