0

我有一个 java 应用程序,它每秒启动和停止数亿个项目(从外部脚本调用)多次。

Input: String key
Output: int value

这个应用程序的目的是在一个永远不会改变的(大约 30k 个键)中寻找某个键Map并返回该值。很容易。

问题:每秒使用多次时效率更高:

  1. 硬编码字典Map
  2. 读取外部文件BufferedReader
  3. ...让我惊讶于你的其他想法

我知道硬编码是邪恶的,但有时,你需要变得邪恶才能提高效率:-)

4

3 回答 3

2

从文件中读取字典。将其存储在一个Map. 将您的 Java 应用程序设置为连续运行的服务(因为您说它每秒被调用多次)。然后你Map将被缓存在 RAM 中。

于 2013-05-02T19:58:00.773 回答
1

最快的是内存中的硬编码映射。如果 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 行清理缓冲区并读取更多内容。

于 2013-05-02T21:01:19.070 回答
0

我会将文件加载到Map应用程序启动时,然后按照您的描述使用它。

我会将数据存储在数据库中以加快加载时间。

绝对不会每次调用都有应用的启动和关闭;将其作为等待IO的服务,使用异步I/O,如netty

于 2013-05-02T19:57:50.647 回答