Java에서 shuffle 메소드 후에 nanoTime 차가 급등하는 특이한 문제가 발생합니다.
글쓴이: overridee / 작성시간: 월, 2018/04/02 - 9:54오후
안녕하세요?
Java에서 특정 작업의 시간을 측정하기 위해 System.nanoTime() 메서드를 사용하고 있습니다.
그런데 200 회의 시간 측정 결과, Collections.shuffle() 메서드를 함께 사용하면 한 번은 반드시 이상한 측정 결과가 나타납니다.
아래는 이상한 결과가 나타나는 소스 코드입니다.
public static void main(String[] args) { Collections.shuffle(new ArrayList<Integer>()); for (int i=0; i<200; i++) { long startTime = System.nanoTime(); long endTime = System.nanoTime(); System.out.println((endTime - startTime)); } }
코드를 보시면, Collections.shuffle의 parameter가 new ArrayList<>()라 아래 시간 측정에는 전혀 영향이 없어보입니다. 하지만 실행해보면 대부분 0이 측정되지만 한 번은 100만이 넘는 값이 측정됩니다. 그리고 Collections.shuffle 라인을 지우면 문제가 발생하지 않습니다.
이 문제는 다른 PC에서도 확인했고, 온라인 자바 컴파일러(codingground, jdoodle)에서도 확인했습니다.
혹시 원인을 알고 계신다면 답변을 부탁드리겠습니다.
감사합니다.
Forums:
아마도 Collections.shuffle 이 gc 의 호출을 부르나 봅니다.
아마도 Collections.shuffle 이 gc 의 호출을 부르나 봅니다.
자바 GC 와 stop-the-world 에 대해서 찾아보세요.
---------------
"Java Garbage Collection" 참고 주소 : http://d2.naver.com/helloworld/1329
-------------- 부분인용
참고 주소 : http://tip.daum.net/openknow/59160106
Collections.shuffle 메소드를 이용해서 List의 값들이 무작위로 리턴해 줍니다.
댓글 달기