【发布时间】:2012-11-04 09:08:24
【问题描述】:
我正在尝试测试我编写的 Java 程序,以证明其效率。我有许多不同的测试要运行,并且我试图在运行时分析中保持精确。问题是不同的测试可能会访问磁盘上常见的信息。因此,为了在我的实验结果中“公平”,我想在实验之间以某种方式以编程方式清除我的 Java 程序正在使用的内部存储器。换句话说,我希望每个实验都有相同的“空内存/缓存”。
我尝试在实验之间读取一个大文件。我也尝试重新启动我的机器。有趣的是,当我读入一个大文件时,时间要糟糕得多,然后我只是重新启动机器(比如 40 秒到 5 秒)。除了在每次实验之间重新启动我的机器之外,清除内部内存的正确方法是什么(即避免通过普通磁盘访问进行实验的人为加速),这是不可行的?
【问题讨论】:
-
但是为什么你认为空磁盘缓存是一个现实的场景呢?你只是在测试非常罕见的最坏情况。
-
谢谢。我同意我正在测试最坏的情况,并且在实践中,情况会更好。但是,我仍然想证明,即使在最坏的情况下,我的程序也能正常运行。 (我不希望我写的关于我的系统的论文的审稿人有借口抱怨缓存问题。)
-
没有用于此的 Java API,但可能有特定于操作系统的方法来执行此操作。那么您使用的是哪个操作系统?
-
查看stackoverflow.com/questions/478340/… 了解一些选项。
-
这很难。现代操作系统缓存最近使用过的文件和目录页面,从我读过的内容来看,在 Windows 中控制它充其量是困难的。即使操作系统不缓存文件,磁盘驱动器也可以。