我有一个非常大的Hashmap(~250MB).创建它大约需要50-55秒,所以我决定将其序列化并将其保存到文件中.从文件中读取大约需要16-17秒.
唯一的问题是查找似乎这样慢.我一直认为hashmap是从文件读入内存的,因此与我自己创建hashmap的情况相比,性能应该是相同的,对吧?这是我用来将hashmap读入文件的代码:
File file = new File("omaha.ser");
FileInputStream f = new FileInputStream(file);
ObjectInputStream s = new ObjectInputStream(new BufferedInputStream(f));
omahaMap = (HashMap<Long, Integer>) s.readObject();
s.close();
Run Code Online (Sandbox Code Playgroud)
当我自己创建hashmap时,3亿次查找大约需要3.1秒,而当我从文件中读取相同的hashmap时大约需要8.5秒.有人知道为什么吗?我忽略了一些明显的东西吗
编辑:
我通过使用System.nanotime()获取时间来"测量"时间,因此没有使用适当的基准测试方法.这是代码:
public class HandEvaluationTest
{
public static void Test()
{
HandEvaluation.populate5Card();
HandEvaluation.populate9CardOmaha();
Card[] player1cards = {new Card("4s"), new Card("2s"), new Card("8h"), new Card("4d")};
Card[] player2cards = {new Card("As"), new Card("9s"), new Card("6c"), new Card("2h")};
Card[] player3cards = {new Card("9h"), new Card("7h"), new Card("Kc"), new Card("Kh")};
Card[] table = {new Card("2d"), new Card("2c"), new Card("3c"), …Run Code Online (Sandbox Code Playgroud)