2012-11-04 21 views
3

효율성을 증명하기 위해 필자가 작성한 Java 프로그램을 테스트하려고합니다. 실행해야 할 여러 가지 테스트가 있으며 런타임 분석에서 정확하도록 노력하고 있습니다. 문제는 다른 테스트가 일반적인 디스크의 정보에 액세스 할 수 있다는 것입니다. 따라서, 실험 결과에서 "공평"하기 위해서는 실험 사이에서 Java 프로그램에서 사용되는 내부 메모리를 어떻게 든 프로그래밍 방식으로 지우고 싶습니다. 즉, 각 실험에 동일한 "빈 메모리/캐시"가 있어야합니다.java가 내부 메모리 캐시를 지우는 중

실험 사이에 큰 파일을 읽으려고했습니다. 나는 또한 내 컴퓨터를 다시 시작하려고했다. 흥미로운 점은 큰 파일을 읽은 후 컴퓨터를 다시 시작할 때 (예 : 40 초에서 5 초) 시간이 훨씬 더 많이 걸린다는 것입니다. 실현 가능성이없는 각 실험 사이에 내 컴퓨터를 다시 시작하는 것 외에 내부 메모리를 정리하는 올바른 방법은 무엇입니까 (즉, 일반적인 디스크 액세스의 실험 속도가 빨라지는 것을 피할 수 있습니까?).

+1

그러나 왜 빈 디스크 캐시가 현실적인 시나리오라고 생각합니까? 아주 희귀 한 최악의 경우를 테스트하는 것입니다. –

+0

감사합니다. 나는 최악의 상황을 테스트하고 있으며, 실제로는 상황이 나아질 것이라고 동의한다. 그러나 최악의 시나리오에서도 내 프로그램이 잘 작동한다는 것을 보여주고 싶습니다. (나는 캐시 문제에 대해 불평 할 변명을하기 위해 내 시스템에 대해 쓰고있는 논문의 심판을 원하고 있지 않다.) – user1797753

+0

Java API가 없지만이를위한 OS 별 방법이있을 수있다. 그래서 어떤 운영 체제를 사용하고 있습니까? – nos

답변

0

내부 메모리

컴퓨터를 다시 시작을 취소하는 올바른 방법은 무엇입니까. 이 말은 가장 느린 옵션이 아닐 수도 있습니다.

컴퓨터는 의도적으로 비효율적 일 수 있으므로 가능한 효율적으로 디자인해야합니다. 비효율적 인 방법에 대한 가정을하는 것이므로 표준 방법이 없습니다.

작성한 파일에 대한 캐시를 지우는 한 가지 방법은 파일을 삭제하는 것입니다. 보존하려는 디스크의 파일에 대한 캐시를 지우려면 주 메모리보다 큰 파일 세트를 작성하여 삭제할 수 있습니다.

Windows를 사용하는 경우 파일을 캐시하는 데 모든 메모리를 사용하지는 않습니다. 당신이 할 수있는 일은 시간이 오래 걸리는 시간과 시간에 수백 MB의 대용량 파일을 작성하는 것입니다. 캐시가 고갈되면 자바에서 걸리는 시간이 갑자기 늘어나고이 시점에서 캐시가 더 명확해진다는 것을 알게됩니다. 이 문제가 발생하면 캐시를 삭제하면 결과적으로 캐시가 비어있게됩니다.

이렇게하면 재현성있는 결과를 얻는데 도움이되지만 재부팅하는 것과 정확하게 같지는 않을 수 있습니다. 참고 : 응용 프로그램을 실행할 때마다 컴퓨터를 재부팅 할 것으로 예상하지 않는 한 재부팅 후 소요되는 시간은 의미가 없습니다.

BTW : OS에서 걱정해야하는 디스크 캐시. Java는 작성한 버퍼와 작성한 코드를 제외하고 파일을 캐시하지 않으므로 사용자가 제어해야합니다.

관련 문제