java - "B"인쇄가 "#"인쇄보다 현저히 느린 이유는 무엇입니까?
performance loops (2)
1000
x 1000
의 두 행렬을 생성했습니다.
첫 번째 매트릭스 : O
및 #
.
두 번째 매트릭스 : O
와 B
다음 코드를 사용하여 첫 번째 행렬을 완료하는 데 8.52 초가 걸렸습니다.
Random r = new Random();
for (int i = 0; i < 1000; i++) {
for (int j = 0; j < 1000; j++) {
if(r.nextInt(4) == 0) {
System.out.print("O");
} else {
System.out.print("#");
}
}
System.out.println("");
}
이 코드를 사용하면 두 번째 행렬이 완료되는 데 259.152 초가 걸렸습니다.
Random r = new Random();
for (int i = 0; i < 1000; i++) {
for (int j = 0; j < 1000; j++) {
if(r.nextInt(4) == 0) {
System.out.print("O");
} else {
System.out.print("B"); //only line changed
}
}
System.out.println("");
}
극적으로 다른 실행 시간의 배경은 무엇입니까?
주석에서 제안 된대로, System.out.print("#");
만 인쇄하십시오 System.out.print("#");
7.8871
초가 걸리는 반면, System.out.print("B");
still printing...
준다.
다른 사람들이 정상적으로 작동한다는 것을 지적하면서, 예를 들어 Ideone.com 을 시도해 보았고 두 코드가 같은 속도로 실행됩니다.
시험 조건:
- Netbeans 7.2 에서이 테스트를 실행하여 출력을 콘솔에 저장했습니다.
- 측정을 위해
System.nanoTime()
을 사용했습니다.
필자는 Eclipse vs Netbeans 8.0.2에 대한 테스트를 Java 버전 1.8과 함께 수행했습니다. 측정을 위해 System.nanoTime()
을 사용했습니다.
식:
두 경우 모두 같은 시간을 보냈습니다 - 약 1.564 초 .
넷빈즈 :
- "#"사용 : 1.536 초
- "B"사용 : 44.164 초
Netbeans은 콘솔에서 인쇄 할 때 성능이 좋지 않습니다.
더 많은 연구가 끝난 후 나는이 코드가 보여주는 Netbeans의 최대 버퍼 ( System.out.println
명령에만 국한되지 않음)의 line-wrapping 이라는 것을 깨달았습니다.
for (int i = 0; i < 1000; i++) {
long t1 = System.nanoTime();
System.out.print("BBB......BBB"); \\<-contain 1000 "B"
long t2 = System.nanoTime();
System.out.println(t2-t1);
System.out.println("");
}
시간 결과는 약 225 밀리 초일 때 매 5 회 반복을 제외하고 매 반복마다 1 밀리 초보다 적습니다. 뭔가 (나노초 단위) :
BBB...31744
BBB...31744
BBB...31744
BBB...31744
BBB...226365807
BBB...31744
BBB...31744
BBB...31744
BBB...31744
BBB...226365807
.
.
.
등등..
개요:
- 이클립스는 "B"
- Netbeans은 (B ( "B") 다음에 공백을 추가하지 않고도) 이클립스에서 문제가 발생하지 않기 때문에 해결할 수있는 줄 바꿈 문제가 있습니다.
순수한 추측 은 당신이 문자 word-wrapping 보다는 word-wrapping 를 시도하는 단말기를 사용하고 B
를 단어 문자로 취급하지만 비 단어 문자로 취급한다는 것입니다. 따라서 라인의 끝 부분에 도달하여 라인을 깰 장소를 검색하면 거의 즉시 #
보이고 행복하게 휴식을 취합니다. 반면에 B
는 더 오랫동안 검색해야하고 랩 할 텍스트가 더 많을 수 있습니다 (일부 터미널에서는 백 스페이스를 출력 한 다음 래핑 된 문자를 덮어 쓸 수있는 공백을 출력하는 등).
하지만 그것은 순수한 추측입니다.