Нечего было делать среди ночи... вот чего учудил в ответ на:
http://myskitch.com/yaroslavlazor/main.rb-20071127-210826.jpg
Еще отличная ссылка по теме:
http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&lang=java&lang2=ruby
Не удержался и решил провести еще несколько экспериментов. Прежде всего, правильнее всего будет вычислять время непосредственно в программе, для чего был добавлен соответствующий инструментальный код. Далее, мне стало интересно, как поведет себя в этой ситуации популярная библиотека "Commons Lang".
Вот что получилось в результате:
Пример кода 1:
public static void main(String[] args) {
final long t1 = System.currentTimeMillis();
final int n = Integer.parseInt(args[0]);
final StringBuilder b = new StringBuilder( n * TEXT.length());
for (int i=0;i<n;i++) {
b.append(TEXT);
}
System.out.println("Result:"+b.reverse().length());
System.out.println("Time:"+(System.currentTimeMillis()-t1)/1000.0);
}
Результат:
etf@etf-desktop:~/prog/JavaApplication1/dist$ time java -jar -Xmx512M -Xms512M JavaApplication1.jar 10000000
Result:50000000
Time:0.936
real 0m1.184s
user 0m0.844s
sys 0m0.208s
Пример кода 2:
public static void main(String[] args) {
final long t1 = System.currentTimeMillis();
System.out.println("Result:"+StringUtils.reverse(StringUtils.repeat(TEXT, Integer.parseInt(args[0]))).length());
System.out.println("Time:"+(System.currentTimeMillis()-t1)/1000.0);
}
Результат:
etf@etf-desktop:~/prog/JavaApplication1/dist$ time java -jar -Xmx512M -Xms512M JavaApplication1.jar 10000000
Result:50000000
Time:2.233
real 0m2.414s
user 0m1.888s
sys 0m0.400s
Пример кода 3 (Ruby):
t1 = Time.now;
puts "Result:" + ("test " * ARGV[0].to_i).reverse.length.to_s;
puts "Time:" + (Time.now - t1).to_s;
Результат:
etf@etf-desktop:~/prog/RubyApplication2/lib$ time ruby main.rb 10000000
Result:50000000
Time:0.734442
real 0m0.760s
user 0m0.560s
sys 0m0.196s
Итак, подведем неутешительные итоги нашего исследования:
Implementation | Time | Ratio |
---|
Ruby | 0.734442 | 1 |
Java (StringBuffer) | 0.936 | 1.27 |
Java (StringUtils) | 2.233 | 3.04 |
----------------
Now playing: Pink - Conversations With My 13 Year Old Self
via FoxyTunes