다른 플러시 정책에 대한 메모리 소비에는 차이가 없습니다. 간단히 말하면 (*), Clover는 거대한 long [] 배열 하나를 할당하고이를 메모리에 영구히 보관하는 방식으로 작동합니다. 플러시는 배열 내용을 하드 드라이브의 파일에 덤프합니다. 배열은 할당이 취소되거나 축소되지 않습니다.
는 는
는 (*)를 사용할 글로벌 범위 (https://confluence.atlassian.com/display/CLOVER/Coverage+Recorders)에 대한 세 가지 범위 레코더 및 다섯 가지 단위 테스트 기록 전략이있다 (https://confluence.atlassian.com/display/CLOVER/Clover+Performance+Tuning)
는 flushPolicy = 간격 또는 flushPolicy는 = 유용 스레드 있습니까 ? 예, JVM을 종료하지 않을 경우 유용합니다. 클로버의 기본 플러시 정책은 JVM 종료 후크에서만 글로벌 커버리지 데이터를 씁니다. 이는 JVM이 종료 될 때까지 커버리지 데이터를 얻지 못한다는 것을 의미한다. 이것은 Tomcat 서버가 영구적으로 실행 중이고 애플리케이션을 재배포하고 테스트를 다시 실행한다고 가정 해 보겠습니다.
어떤 플러시 간격을 사용할 수 있습니까? 내 경험으로 볼 때, 플러시 작업은 매우 빠릅니다. 빠른 계산 : ~ 1MLOC을 갖는 프로젝트는 ~ 1MMB의 메소드 + 문장 + 브래치 (~ 4MB 기록 파일)를 가질 수 있습니다. 따라서 500MB/s SSD 드라이브에서 초당 ~ 100 번 플러시 할 수 있습니다.
나는 을 보았습니다. flushInterval 값은 500ms에서 5000ms 사이입니다. 낮은 값을 사용하는 것이 좋습니다. 왜? 클로버의보고 목표 (clover2 : clover)는 적어도 한 번의 플러시 작업이 발생했는지 확인하기 위해 보고서 생성을 시작할 때까지 2 * flushInterval 동안 일시 중지됩니다. 따라서 flushInterval 값이 부당하게 높으면 빌드 속도가 느려집니다.
몇 가지 가상 컴퓨터에서 clover.db에 적용 범위를 수집 한 다음 다른 컴퓨터에서 병합하는 매우 구체적인 설정이 있습니다. 당신의 대답을 읽은 후, 간격 플러시 정책을 켜면 항상 기록 된 데이터를 메모리에 유지하면서 성능 이점을 얻지 못할 것입니다 (맞습니까?). 또한 필자의 경우 기록 된 파일은 하드 드라이브에 쓰기 때문에 90MB가 지나치게 증가 할 수 있습니다. – Martin
"... 간격 플러시 정책을 켜면 항상 기록 된 데이터를 항상 메모리에 유지하므로 성능상의 이점을 얻을 수 없습니다."- 맞습니다. – Marek
"... 내 경우 기록 된 파일은 90MB입니다." 와우 이것은 엄청나 다. 프로젝트의 규모는 얼마나됩니까? – Marek