我有一个 java 应用程序,它每秒启动和停止数亿个项目(从外部脚本调用)多次。
Input: String key
Output: int value
这个应用程序的目的是在一个永远不会改变的(大约 30k 个键)中寻找某个键Map
并返回该值。很容易。
问题:每秒使用多次时效率更高:
- 硬编码字典
Map
- 读取外部文件
BufferedReader
- ...让我惊讶于你的其他想法
我知道硬编码是邪恶的,但有时,你需要变得邪恶才能提高效率:-)
我有一个 java 应用程序,它每秒启动和停止数亿个项目(从外部脚本调用)多次。
Input: String key
Output: int value
这个应用程序的目的是在一个永远不会改变的(大约 30k 个键)中寻找某个键Map
并返回该值。很容易。
问题:每秒使用多次时效率更高:
- 硬编码字典
Map
- 读取外部文件
BufferedReader
- ...让我惊讶于你的其他想法
我知道硬编码是邪恶的,但有时,你需要变得邪恶才能提高效率:-)
从文件中读取字典。将其存储在一个Map
. 将您的 Java 应用程序设置为连续运行的服务(因为您说它每秒被调用多次)。然后你Map
将被缓存在 RAM 中。
最快的是内存中的硬编码映射。如果 ua 有一个巨大的文件,你可以使用内存映射文件:
MappedByteBuffer in = new FileInputStream("map.txt").getChannel().map(
FileChannel.MapMode.READ_ONLY, 0, LENGTH);
StringBuilder bs = new StringBuilder();
//read 1/4 of the file
while (i < LENGTH/4)
bs.append((char)in.get(i++));
虽然这种方法有点问题,但实际上您会希望在换行符上对文件进行分区,即读取直到第 100 行清理缓冲区并读取更多内容。