Java反序列化速度
我正在编写一个Java应用程序,其中需要读取一个字典文本文件(每行是一个单词)并将其存储在哈希集中。每次启动应用程序时,都会再次读取同一个文件(6兆字节的unicode文件) 这似乎很昂贵,所以我决定序列化生成的哈希集并将其存储到二进制文件中。我希望我的应用程序在这之后运行得更快。相反,它变慢了:从序列化前约2,5秒到序列化后约5秒Java反序列化速度,java,serialization,Java,Serialization,我正在编写一个Java应用程序,其中需要读取一个字典文本文件(每行是一个单词)并将其存储在哈希集中。每次启动应用程序时,都会再次读取同一个文件(6兆字节的unicode文件) 这似乎很昂贵,所以我决定序列化生成的哈希集并将其存储到二进制文件中。我希望我的应用程序在这之后运行得更快。相反,它变慢了:从序列化前约2,5秒到序列化后约5秒 这是预期的结果吗?我认为在类似的情况下,序列化应该提高速度。这不是一种或另一种序列化机制的问题,而是序列化的数据结构的问题 这些单词有一个非常高效、自然的表示法:文
这是预期的结果吗?我认为在类似的情况下,序列化应该提高速度。这不是一种或另一种序列化机制的问题,而是序列化的数据结构的问题 这些单词有一个非常高效、自然的表示法:文本文件中的一个简单列表。读起来很快 您已经创建了一个不同的数据结构来存储它们:一个哈希表。表示哈希表需要更多内存。然而,它的好处是,与简单的列表相比,查找单词的速度非常快 但这种折衷意味着序列化也会变慢,因为哈希表的原始序列化将序列化更多的数据,并且会变大,因此会变慢
我认为你应该坚持简单地阅读文本文件。@Sean的答案是正确的。Java序列化/反序列化会带来很大的性能开销。如果需要使字典加载更快(或…),请考虑以下方法:
- 使用
类读取文件可能会加快速度java.nio.*
- 如果应用程序不需要在启动时立即加载字典,请考虑使用单独的线程异步执行字典加载。字典加载并不快,但(例如)应用程序的GUI启动速度更快