Porównanie wydajności

0

Mam za zadanie porównać wydajność metod: add(), remove(), contains(), dla kolekcji: ArrayList, HashSet, LinkedList, Stack, Vector, PriorityQueue i TreeSet. W kolekcjach mają być przechowywane int/Integer. I mam sprawdzić czas wykonania operacji i ilość pamięci do przechowywania obiektu w pamięci. I tu jest problem bo nie wiem jak się za to zabrać. Jest to gdzieś w dokumentacji czy trzeba samemu jakiś kod napisać?

0

http://openjdk.java.net/projects/code-tools/jmh/ - jedyne narzędzie które może być wykorzystywane do mierzenia wydajności na JVMach

0
rubaszny_karp napisał(a):

http://openjdk.java.net/projects/code-tools/jmh/ - jedyne narzędzie które może być wykorzystywane do mierzenia wydajności na JVMach

Eeee tam. Jest jeszcze na przykład http://scalameter.github.io/ i ma nawet API Javowe: http://scalameter.github.io/home/gettingstarted/0.7/javausage/index.html

0

Eeee tam. Jest jeszcze na przykład http://scalameter.github.io/ i ma nawet API Javowe: http://scalameter.github.io/home/gettingstarted/0.7/javausage/index.html

Nie neguje (w sumie, to nawet o nim nie słyszałem, każda konferencja, każda prezentacja to JMH) - pozwolisz jednak że zaufam Aleksey Shipilëv ;D

0

@Wibowit @rubaszny_karp
A nie można po prostu jak Bóg przykazał

long start = System.nanoTime();
...
(operacje na kolekcjach w wielkiej skali argumentów wejściowych)
...
long end = System.nanoTime();
System.out.println("Tym razem zajęło: " + ((end - start) / 1000) + "us." );
0
Pinek napisał(a):

@Wibowit @rubaszny_karp
A nie można po prostu jak Bóg przykazał

long start = System.nanoTime();
...
(operacje na kolekcjach w wielkiej skali argumentów wejściowych)
...
long end = System.nanoTime();
System.out.println("Tym razem zajęło: " + ((end - start) / 1000) + "ms." );

Ok ale jak z pamięcią do przechowywania jednego argumentu w kolekcji?

0
Pinek napisał(a):

@Wibowit @rubaszny_karp
A nie można po prostu jak Bóg przykazał

long start = System.nanoTime();
...
(operacje na kolekcjach w wielkiej skali argumentów wejściowych)
...
long end = System.nanoTime();
System.out.println("Tym razem zajęło: " + ((end - start) / 1000) + "ms." );

A upewnisz się że kod został skompilowany przez JIT ? co z Garbage Collectorem ? co z możliwymi optymalizacjami które JIT wykona ? przecież to jest tak niedeterministyczne ...

potem widzę takie benchmarki .. np: to https://benchmarksgame.alioth.debian.org/u64q/go.html - i jeszcze jakiś agent to potem pokazuje lol

Chcesz robisz benchmark ? naucz się środowiska.

0

witam , może ktoś mi wyjaśnic dlaczego po podzieleniu czasu w nanosekundach przez 1000 dostaje sie czas w milisekundach ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1