Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Решил попробовать себя и Java 8 в тесте Валкина (http://lionet.livejournal.com/137511.html)
- Для того, чтобы иметь точку отсчёта, я собрал вариант с с++, ровно как указано в исходном посте (добавил заголовок #include <stdint.h>), и запустил его несколько раз. Посчитал, что прогрел достаточно, и сделал замер:
- -------
- meowthsli@meowthsli-v3 ~/NetBeansProjects/Java8 $ time ./test-c
- 9999010000
- real 0m2.851s
- user 0m2.008s
- sys 0m0.838s
- -------
- Этот замер я буду считать референсным.
- Далее, сначала я написал программу на Java, использующую ArrayList<Long>. Замеренное время (> 11s), показалось мне совсем неприличным, но тут "индеец Зоркий Глаз" заприметил, что в c++ варианте тоже использовался не [] с ручным ресайзом, а вполне себе библиотечная коллекция.
- Поэтому со спокойной совестью я скачал trove collections (коллекции для примитивов, и заменил код на них). Программа стала выглядеть так:
- import gnu.trove.list.array.TLongArrayList;
- public class Java8 {
- public static void main(String[] args) {
- long sum = 0;
- for(int e = 0; e < 200; e++) {
- sum = 0;
- TLongArrayList x = new TLongArrayList();
- for(int i = 0; i < 1000000; i++) {
- x.add(i);
- }
- TLongArrayList y = new TLongArrayList();
- for(int i = 0; i < 1000000-1; i++) {
- y.add(x.get(i) + x.get(i+1));
- }
- for (int i = 0; i < 1000000; i += 100) {
- sum += y.get(i);
- }
- }
- System.out.println(sum);
- }
- }
- Интересующее время запуска (аналогично, запустил перед этим 3-4 раза):
- --------
- meowthsli@meowthsli-v3 ~/NetBeansProjects/Java8 $ time java -XX:+AggressiveOpts -jar dist/Java8.jar
- 9999010000
- real 0m2.674s
- user 0m2.884s
- sys 0m0.089s
- --------
- Отмена AggressiveOpts ухудшает на десятки ms на моей машине, т.е. достоверно влияние оценить невозможно. Но результаты понравились.
- Чего ещё захотелось? Снизить время старта. Поэтому -- вперёд, берём drip (https://github.com/ninjudd/drip) -- drop-in replacement для java, держащий пул готовых для старта jvm (а почему? а могу! текст программы не менял, все остальные условия соблюдены)
- Запускаем:
- ---------
- meowthsli@meowthsli-v3 ~/NetBeansProjects/Java8 $ time ./drip -XX:+AggressiveOpts -jar dist/Java8.jar
- 9999010000
- real 0m2.938s
- user 0m0.017s
- sys 0m0.028s
- ---------
- Пока что это -- максимально достигнутый результат. Немного лучшие результаты были, но они "мерцали"" и поэтому были сочтены статистически недостоверными.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement