在Java中尽可能快地执行命令集合

时间:2014-07-25 12:19:50

标签: java performance collections command-pattern trove4j

在我的项目中,我希望将大量函数从脚本加载到集合中以保存它们并在以后执行它们(可能很多次)而无需再次读取脚本。 我需要尽可能快地访问函数,并考虑两种方法:

  1. 命令模式: 我的第一个想法是将脚本命令作为对象(命令模式)存储在集合中,并在需要执行脚本时在for-each-loops中执行所有这些操作。 虽然代码更易于阅读,但我认为通过对象访问所有不同的命令会花费大量的性能和内存。

    for (Command command : commandList) { command.execute();

  2. 字符集和切换案例: 我的第二个想法是将原始变量(如char或int)存储到集合中,并将switch-case结构放在for-each-loops中。我会使用原语,因为我认为它比String对象更快。因此我会使用像Trove这样的库。我认为这样可能比命令模式更快,因为不需要访问命令对象。此外,将占用更少的内存。另一方面,我认为它可能会更慢,因为命令模式可以直接访问正确的函数,而switch-case结构必须多次检查char是a,b,c,d等等。

    for (char command : commandList) { switch(command){ case 'a': doA(); break; case 'b': doB(); break; case 'c': ... } }

  3. 你认为一种方式更好吗?你知道另一种方式吗?你会推荐哪种类型的收藏品?

2 个答案:

答案 0 :(得分:2)

你的问题归结为:多态性与Switch语句。

前者具有更好的可维护性和可读性,因为无论何时想知道发生了什么或添加它,都不需要使用魔术数字作为其键(或你的情况下的字符)来使用大型switch语句。

在性能方面要么可以忽略不计,要么高度优化,因为它们是非常常见和简单的情况,因此最好担心可读性/可维护性而不是优化,因此多态性更好。

答案 1 :(得分:0)

我认为第二种方法更好。

  

另一方面,我认为它可能会因为命令而变慢   pattern可以在switch-case时直接访问正确的函数   如果char是a,b,c,d等,则构造必须多次检查。

编译器会注意并优化它。如果您的脚本文件大小不是GB,则无关紧要。