performance - java - parallelStream forEach - "B"를 인쇄하는 것이 "#"을 인쇄하는 것보다 훨씬 느린 이유는 무엇입니까?

Java forEach index / java / loops / for-loop / system.out

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

다음 코드를 사용하여 첫 번째 행렬을 완료하는 데 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"); // 라인 만 변경됨
        }
    }

    System.out.println("");
}

cнŝdk



Answer #1

코드를 자세히 살펴보면 첫 번째 루프 끝에서 줄 바꿈을 사용했습니다. 그러나 두 번째 루프에서 줄 바꿈을 사용하지 않았습니다. 따라서 두 번째 루프에서 1000 개의 문자가있는 단어를 인쇄 할 것입니다. 이로 인해 단어 줄 바꿈 문제가 발생합니다. B 뒤에 단어가 아닌 문자 "" 를 사용하면 프로그램을 컴파일하는 데 5.35 초 밖에 걸리지 않습니다 . 그리고 100 개 값 또는 50 개 값을 전달한 후 두 번째 루프에서 줄 바꿈을 사용하면 각각 8.56 초7.05 초만 걸립니다 .

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");
        }
        if(j%100==0){               // 두 번째 루프에 줄 바꿈 추가
            System.out.println();
        }                    
    }
    System.out.println("");                
}