[Java] "B"인쇄가 "#"인쇄보다 현저히 느린 이유는 무엇입니까?


Answers

필자는 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
.
.
.

등등..

개요:

  1. 이클립스는 "B"
  2. Netbeans은 (B ( "B") 다음에 공백을 추가하지 않고도) 이클립스에서 문제가 발생하지 않기 때문에 해결할 수있는 줄 바꿈 문제가 있습니다.
Question

1000 x 1000 의 두 행렬을 생성했습니다.

첫 번째 매트릭스 : O# .
두 번째 매트릭스 : OB

다음 코드를 사용하여 첫 번째 행렬을 완료하는 데 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() 을 사용했습니다.



Links