java清除内部内存缓存

时间:2012-11-04 09:08:24

标签: java memory-management

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

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

1 个答案:

答案 0 :(得分:0)

  

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

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

计算机的设计尽可能高效,使它们故意低效意味着假设你想要制作它的效率低,所以没有标准的方法来做到这一点。

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

如果您使用的是Windows,则无论如何都不会使用所有内存来缓存文件。你可以做的是在一个时间和地点写出几百MB的大文件。当缓存耗尽时,您会看到Java的时间突然跳跃,您知道此时您可能已经清除了缓存。发生这种情况后,删除它们,结果您的缓存可能为空。

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

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