使用StringUtils方法比Java方法运行得更快?

时间:2011-10-26 19:16:22

标签: java string apache-commons

我想知道来自Apache Commons Lang库的StringUtils的方法是否比Java String方法运行得快。

我知道这是微优化,但这是必要的,因为方法将被执行数百万次。

在Java中使用正则表达式的方法,如split()或与equals()的字符串比较。

7 个答案:

答案 0 :(得分:3)

Java String类中的方法和StringUtils中的方法都针对它们旨在解决的特定任务进行了高度优化。设计不同的方法来解决稍微不同的任务。尝试选择与您要解决的任务最匹配的方法,并且您可能会获得非常好的性能。

如果有两种可能的方法看起来同样好,并且获得最后一点性能至关重要,那么测量它!将两种方法的性能计算在实际数据上。

但是还要记住,购买速度更快的计算机往往更便宜,而不是花费数小时的开发时间来微优化代码,使其在慢速机器上快速运行。

答案 1 :(得分:1)

嗯,这可能取决于每种方法。大多数方法代表人们经常不得不手写的非常基本的代码,例如

return s1 == s2 || (s1 == null && s2 == null) || (s1 != null && s1.equals( s2 ) );

热门编译器甚至可以删除方法调用,很可能会对此代码进行优化。我猜想你能找到的唯一节省时间是书面形式。

正如其他地方所建议的那样,我建议您自己使用System.currentTimeMillis()围绕在某些随机字符串上调用该方法的循环来对您感兴趣的方法进行基准测试;随机,因为你不希望它被优化掉。

答案 2 :(得分:1)

我不认为它无论如何都是优化的,Apache Commons包含'帮助程序实用程序',这意味着它更有效地进行开发而不是运行时性能效率

使用JVM 时,性能也可能会发生变化。

我可以理解,您担心大量执行或大数据的性能。但这并不意味着微优化谬误不适用于此。花更多的时间来考虑和尝试其他方法来提高这些基本任务的性能(不是在一个线程中运行,而是在与机器上的CPU一样多的线程中运行等等,这当然更高效。 )。为JVM留下如此低级别的东西是明智之举。根据我的经验,即时编译器通常比任何开发人员都聪明得多。

如果你真的想这样,你应该测试它。它不应该那么困难,如果性能取决于数据,你可能有合适的人来测试它。

答案 3 :(得分:0)

首先,您是否设定了绩效标准?你想获得多少表现?

其次,您是否在实际负载下对整个应用程序进行了分析?你应该做的第一件事是确保你甚至在代码的正确部分工作。

无论如何,你的问题太模糊了,无法在这里得到解答。您需要提供有关您正在使用的数据集的更多信息,以及您实际对数据执行的操作。例如,优化远离String.equals的一个技巧是实现String实例。您将首先为创建实例支付相当高的前期成本,但稍后等于应该基于==返回true,然后才能进行完全比较。您需要根据相关数据集以及您对数据执行的操作来决定是否应用此优化。

答案 4 :(得分:0)

为什么你要更快?你有性能要求吗?这将定义您是否足够快。只要您符合要求,就可以继续下一个问题。 “哪个更快?”的问题暗示你还没试过。选择一个,检查您的性能要求是否得到满足,只检查另一个是否满足要求。

答案 5 :(得分:0)

他们没有参加比赛。 StringUtils不是String类中方法的替代,它是下一个更高层上常见习语的集合。在大多数情况下,StringUtils会调用String。除非它使用反射,否则它不能做任何其他事情。

答案 6 :(得分:0)

StringUtils#splitString#split快。

String#equalsStringUtils#equals快。