A set of JMH benchmarks for various JVM constructions, written in Java and Kotlin.
Build:
mvn clean package
Tests includes:
- Loops through lists and arrays
- Comparing different DataTime API available for JVM, like joda.time, time4j, java.util.Calendar, java.time, threeten.bp. Comparing typical operations plusDays, plusWeeks, daysBetween, etc.
- Comparing mutable and immutable collections
Comparision between:
- Standard JDK mutable collections
- Persistent collections https://github.com/hrldcpr/pcollections
- Eclipse collections mutable and immutable https://github.com/eclipse/eclipse-collections
- Guava immutable collections
- Java immutable collections https://github.com/brianburton/java-immutable-collections
- Androidx collections like ArraySet, SparseArray
Collection | Score ns/op |
---|---|
ArrayList | 4854015 |
JImmutableLinkedStack | 4822985 |
LinkedList | 5921889 |
ConsPStack | 6740323 |
JImmutableListBuilder | 8467454 |
JImmutableTreeList | 181495708 |
TreePVector | 537843369 |
Collection | Score ns/op |
---|---|
ArrayList | 21330 |
ConsPStack | 26286 |
JImmutableLinkedStack | 32304 |
Stack | 85272 |
LinkedList | 160295 |
JImmutableTreeList | 882873 |
TreePVector | 2061153 |
Collection | Score ns/op |
---|---|
ArrayList | 239669 |
JImmutableLinkedStack | 717536 |
ConsPStack | 819618 |
LinkedList | 853572 |
TreePVector | 3996926 |
JImmutableTreeList | 4090843 |
Stack | 5069004 |
Collection | Score ns/op |
---|---|
JImmutableTreeList | 20964836 |
TreePVector | 71693585 |
ArrayList | 353459261 |
ArrayList with predefined size | 353432854 |
Stack | 354646074 |
LinkedList | 4779051906 |
ConsPStack | StackOverflowError |
ConsPStack uses recursion to add a new element, so it get crashed.
Collection | Score ns/op |
---|---|
JImmutableTreeList | 19354452 |
Stack | 4442481048 |
ArrayList | 4802332800 |
LinkedList | 10669939267 |
TreePVector | 71387068447 |
ConsPStack | StackOverflowError |
Collection | Score ns/op |
---|---|
HashSet | 130738821 |
JImmutableSetBuilder | 288206431 |
JImmutableHashSet | 434394386 |
TreeSet | 782037380 |
MapPSet | 1025752840 |
JImmutableTreeSet | 1089905931 |
ArraySet | 41545653723 |
Collection | Score ns/op |
---|---|
HashSet | 9.2 |
TreeSet | 23.5 |
JImmutableHashSet | 27.0 |
ArraySet | 27.3 |
JImmutableMultiset | 28.3 |
MapPSet | 54.5 |
Collection | Score ns/op |
---|---|
ArraySet | 444388 |
HashSet | 1984468 |
TreeSet | 2321796 |
MapPSet | 10379233 |
JImmutableMultiset | 19757874 |
JImmutableHashSet | 19788659 |
Collection | Score ns/op |
---|---|
HashSet | 157829 |
ArraySet | 1637993 |
TreeSet | 1683893 |
MapPSet | 7255522 |
JImmutableHashSet | 9835587 |
JImmutableMultiset | 11816974 |
Collection | Score ns/op |
---|---|
EclipseUnifiedMap | 4616675 |
HashMap | 5903254 |
LinkedHashMap | 6696584 |
EclipseConcurrentHashMap | 9804946 |
ConcurrentHashMap | 11176820 |
JImmutableMapBuilder | 26891367 |
JImmutableHashMap | 39071872 |
IntPMap | 49561724 |
JImmutableTreeMap | 62281212 |
HashPMap | 70886001 |
SparseArray | 316250855 |
ArrayMap | 506483387 |
EclipseImmutableMap | 112506483387 |
GuavaImmutableMap | 212506483387 |
EclipseImmutableMap and GuavaImmutableMap totally recreate map when adding new element, that's why they are so slow
Collection | Score ns/op |
---|---|
HashMap | 5.4 |
LinkedHashMap | 5.6 |
EclipseMutableMap | 6.4 |
EclipseImmutableMap | 6.6 |
GuavaImmutableMap | 7.4 |
SparseArray | 28.7 |
ArrayMap | 31.2 |
JImmutableHashMap | 31.5 |
TreeMap | 39.6 |
IntTreePMap | 46.3 |
HashPMap | 72.7 |
JImmutableTreeMap | 80.0 |
Collection | Score ns/op |
---|---|
SparseArray | 14385 |
ArrayMap | 31600 |
GuavaImmutableMap | 68962 |
EclipseImmutableMap | 205202 |
HashMap | 372728 |
EclipseMutableMap | 433659 |
LinkedHashMap | 484310 |
TreeMap | 489393 |
IntTreePMap | 844354 |
HashPMap | 1109556 |
JImmutableTreeMap | 3297182 |
JImmutableHashMap | 7285167 |
Collection | Score ns/op |
---|---|
ArrayMap | 232476 |
EclipseMutableMap | 446745 |
GuavaImmutableMap | 520165 |
EclipseImmutableMap | 567447 |
HashMap | 595179 |
TreeMap | 682662 |
IntTreePMap | 2403714 |
HashPMap | 3510105 |
JImmutableTreeMap | 7237417 |
JImmutableHashMap | 13431226 |
Collection | Score ns/op |
---|---|
GuavaImmutableMap | 4168899 |
EclipseMutableMap | 4190743 |
EclipseImmutableMap | 4338962 |
LinkedHashMap | 7382515 |
HashMap | 7877748 |
JImmutableHashMap | 16173780 |
SparseArray | 16062088 |
ArrayMap | 17775730 |
IntTreePMap | 27638864 |
HashPMap | 38952774 |
TreeMap | 40107206 |
JImmutableTreeMap | 48937962 |
Collection | Score ns/op |
---|---|
LinkedHashMap | 303094 |
HashMap | 315987 |
EclipseMutableMap | 434462 |
ArrayMap | 2422169 |
TreeMap | 3033837 |
SparseArray | 4741959 |
IntTreePMap | 10098933 |
HashPMap | 11884758 |
JImmutableTreeMap | 15688043 |
JImmutableHashMap | 20559828 |
EclipseImmutableMap | 128161834031 |
GuavaImmutableMap | 231715633402 |