감사드립니다. 처음부터 데이터를 작성하는 데 Double.toString() 또는 Integer.toString()을 사용했다면이 작업을 여러 번, 여러 번 수행해야하지만 Double.toString()보다 저렴할 수있는 경우 상당히 비싼 작업입니다.
float
을 사용하면 결코 반올림 문제가 발생할 수 없다는 것을 알고있는 경우가 아니면 double
만 사용하는 것이 좋습니다. ;)
String을 작성하거나 HashMap에 항목을 추가하는 것만큼이나 비용이 많이 듭니다. 이 일을 피하려는 계획이 아니라면, 나는 그것에 대해 걱정하지 않을 것입니다.
편집 : @Stackers '벤치 마크와 마찬가지로 나는 nanoTime을 (이상 테스트를 실행하고 사용합니다)
int runs = 10000000;
String val = "" + Math.PI;
long start = System.nanoTime();
for (int i = 0; i < runs; i++)
Float.parseFloat(val);
long time = (System.nanoTime() - start)/runs;
System.out.println("Average Float.parseFloat() time was " + time + " ns.");
long start2 = System.nanoTime();
for (int i = 0; i < runs; i++)
Double.parseDouble(val);
long time2 = (System.nanoTime() - start2)/runs;
System.out.println("Average Double.parseDouble() time was " + time2 + " ns.");
인쇄 BTW
Average Float.parseFloat() time was 474 ns.
Average Double.parseDouble() time was 431 ns.
: 내가 직접의 ByteBuffer의 두 배를 읽는 기능이 80ns가 걸린다. 그것은 String을 필요로하지 않으며 어떤 객체도 생성하지 않기 때문에 더 빠릅니다. 그러나 이렇게하는 것은 결코 쉬운 일이 아니며 객체 생성을 피하기 위해 핵심 시스템을 설계해야합니다. ;)
측정 할 수 있습니까? –
Float.parseFloat() 대신 Float.valueOf()를 사용할 수도 있습니다. 간단한 캐싱을 사용하기 때문에 성능이 약간 향상됩니다. – bvk256
@ bvk256 : Float.valueOf는 캐싱을하지 않습니다. javadoc은 제안하지만, (최소한 Sun JDK에서) 소스 코드를 보면, 그렇지 않습니다. 단지 새로운 인스턴스를 만듭니다. 정수형의 valueOf 메서드는 있지만 부동 소수점 형식은 아닙니다. –