Advertisement
meowthsli

Тест Валкина

Feb 17th, 2016
237
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.40 KB | None | 0 0
  1. Решил попробовать себя и Java 8 в тесте Валкина (http://lionet.livejournal.com/137511.html)
  2.  
  3. Для того, чтобы иметь точку отсчёта, я собрал вариант с с++, ровно как указано в исходном посте (добавил заголовок #include <stdint.h>), и запустил его несколько раз. Посчитал, что прогрел достаточно, и сделал замер:
  4.  
  5. -------
  6. meowthsli@meowthsli-v3 ~/NetBeansProjects/Java8 $ time ./test-c
  7. 9999010000
  8.  
  9. real 0m2.851s
  10. user 0m2.008s
  11. sys 0m0.838s
  12. -------
  13.  
  14. Этот замер я буду считать референсным.
  15.  
  16. Далее, сначала я написал программу на Java, использующую ArrayList<Long>. Замеренное время (> 11s), показалось мне совсем неприличным, но тут "индеец Зоркий Глаз" заприметил, что в c++ варианте тоже использовался не [] с ручным ресайзом, а вполне себе библиотечная коллекция.
  17.  
  18. Поэтому со спокойной совестью я скачал trove collections (коллекции для примитивов, и заменил код на них). Программа стала выглядеть так:
  19.  
  20. import gnu.trove.list.array.TLongArrayList;
  21.  
  22. public class Java8 {
  23.  
  24. public static void main(String[] args) {
  25. long sum = 0;
  26.  
  27. for(int e = 0; e < 200; e++) {
  28. sum = 0;
  29.  
  30. TLongArrayList x = new TLongArrayList();
  31. for(int i = 0; i < 1000000; i++) {
  32. x.add(i);
  33. }
  34.  
  35. TLongArrayList y = new TLongArrayList();
  36. for(int i = 0; i < 1000000-1; i++) {
  37. y.add(x.get(i) + x.get(i+1));
  38. }
  39.  
  40. for (int i = 0; i < 1000000; i += 100) {
  41. sum += y.get(i);
  42. }
  43. }
  44. System.out.println(sum);
  45. }
  46. }
  47.  
  48. Интересующее время запуска (аналогично, запустил перед этим 3-4 раза):
  49.  
  50. --------
  51. meowthsli@meowthsli-v3 ~/NetBeansProjects/Java8 $ time java -XX:+AggressiveOpts -jar dist/Java8.jar
  52. 9999010000
  53.  
  54. real 0m2.674s
  55. user 0m2.884s
  56. sys 0m0.089s
  57. --------
  58.  
  59. Отмена AggressiveOpts ухудшает на десятки ms на моей машине, т.е. достоверно влияние оценить невозможно. Но результаты понравились.
  60. Чего ещё захотелось? Снизить время старта. Поэтому -- вперёд, берём drip (https://github.com/ninjudd/drip) -- drop-in replacement для java, держащий пул готовых для старта jvm (а почему? а могу! текст программы не менял, все остальные условия соблюдены)
  61. Запускаем:
  62.  
  63. ---------
  64. meowthsli@meowthsli-v3 ~/NetBeansProjects/Java8 $ time ./drip -XX:+AggressiveOpts -jar dist/Java8.jar
  65. 9999010000
  66.  
  67. real 0m2.938s
  68. user 0m0.017s
  69. sys 0m0.028s
  70. ---------
  71.  
  72. Пока что это -- максимально достигнутый результат. Немного лучшие результаты были, но они "мерцали"" и поэтому были сочтены статистически недостоверными.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement