3

我正在尝试测试我编写的 Java 程序,以证明其效率。我有许多不同的测试要运行,并且我试图在运行时分析中保持精确。问题是不同的测试可能会访问磁盘上常见的信息。因此,为了在我的实验结果中保持“公平”,我想在实验之间以某种方式以编程方式清除我的 Java 程序正在使用的内部存储器。换句话说,我希望每个实验都有相同的“空内存/缓存”。

我尝试在实验之间读取一个大文件。我也尝试重新启动我的机器。有趣的是,当我读入一个大文件时,时间要糟糕得多,然后我只是重新启动机器(比如 40 秒到 5 秒)。除了在每次实验之间重新启动我的机器之外,清除内部内存的正确方法是什么(即避免通过普通磁盘访问进行实验的人为加速),这是不可行的?

4

1 回答 1

0

清除内存的正确方法是什么

重新启动计算机。正如您所说,这可能不是最慢的选择。

计算机被设计为尽可能高效,故意使它们低效意味着对您想要使其低效做出一些假设,因此没有标准的方法来做到这一点。

清除已写入文件的缓存的一种方法是删除它们。如果要清除磁盘中要保留的文件的缓存,可以写入大量文件,大于主内存并删除它们。

如果您使用的是 Windows,它无论如何都不会使用所有内存来缓存文件。你可以做的是一次写几百MB的大文件,这需要多长时间。当缓存用尽时,您会看到 Java 花费的时间突然增加,并且您知道此时您可能已经清除了缓存。发生这种情况后,删除它们,您的缓存可能因此为空。

这可以帮助您获得可重现的结果,但这可能与重新启动并不完全相同。注意:除非您希望每次运行应用程序时都重新启动计算机,否则重新启动后所花费的时间可能无论如何都没有意义。

顺便说一句:您应该担心操作系统中的磁盘缓存。Java 不会缓存文件,除非在您创建的缓冲区和您编写的代码中,因此这些文件应该在您的控制之下。

于 2012-11-04T10:35:44.200 回答