javolution.util
package
(Javolution Collections versus Standard Collections Classes) are
shown in Annex of the presentation:
Collection Classes for Real-Time and High-Performance Applications (pdf)
java -server -Xms512M -Xmx512M -jar javolution.jar perf
ant run
.C:\javolution-5.2>java -version java version "1.6.0_01-ea" Java(TM) SE Runtime Environment (build 1.6.0_01-ea-b01) Java HotSpot(TM) Client VM (build 1.6.0_01-ea-b01, mixed mode) C:\javolution-5.2>ant run ... run: [java] [info] Javolution - Java(TM) Solution for Real-Time and Embedded Systems [java] [info] Version 5.2.4 (J2SE 1.6+) September 20 2007 (http://javolution.org) [java] [info] [java] [info] Load Configurable Parameters from System.getProperties()... [java] [info] [java] [info] ------------------------------------------------- [java] [info] -- Test Suite for package javolution.context.* -- [java] [info] ------------------------------------------------- [java] [test] ConcurrentContext - Quick Sort (size: 10000, concurrency: 0): 7.84 ms (minimum 4.83 ms) [java] [test] ConcurrentContext - Quick Sort (size: 10000, concurrency: 1): 4.74 ms (minimum 4.42 ms) [java] [info] [java] [test] HeapContext (default) - Create 1000 small objects: 19.6 ns (minimum 13.6 ns) [java] [test] StackContext Create 1000 small objects: 20.4 ns (minimum 16.2 ns) [java] [info] [java] [test] HeapContext (default) - new char[4096]: 4.51 us (minimum 2.36 us) [java] [test] Recycled - ArrayFactory.CHARS_FACTORY.array(4096): 435 ns (minimum 388 ns) [java] [info] [java] [info] ---------------------------------------------- [java] [info] -- Test Suite for javolution.util.* classes -- [java] [info] ---------------------------------------------- [java] [info] Collections/Maps of 256 elements (configurable "javolution.UtilTestSuite#SIZE") [java] [info] [java] [info] - Add elements to collection - [java] [test] New javolution.util.FastTable.add(element) : 17.3 ns (minimum 14.8 ns) [java] [test] New java.util.ArrayList.add(element) : 21.0 ns (minimum 18.0 ns) [java] [test] New javolution.util.FastList.add(element) : 41.7 ns (minimum 36.0 ns) [java] [test] New java.util.LinkedList.add(element) : 34.5 ns (minimum 24.4 ns) [java] [test] New javolution.util.FastSet.add(element) : 119 ns (minimum 94.5 ns) [java] [test] New java.util.HashSet.add(element) : 174 ns (minimum 154 ns) [java] [test] Recycled javolution.util.FastTable.add(element) : 13.8 ns (minimum 13.0 ns) [java] [test] Recycled java.util.ArrayList.add(element) : 13.0 ns (minimum 12.4 ns) [java] [test] Recycled javolution.util.FastList.add(element) : 19.8 ns (minimum 18.6 ns) [java] [test] Recycled java.util.LinkedList.add(element) : 36.2 ns (minimum 26.0 ns) [java] [test] Recycled javolution.util.FastSet.add(element) : 69.8 ns (minimum 65.7 ns) [java] [test] Recycled java.util.HashSet.add(element) : 141 ns (minimum 130 ns) [java] [info] [java] [info] - Iterate over collections - [java] [test] Iterates over javolution.util.FastTable : 6.44 ns (minimum 5.34 ns) [java] [test] Iterates over java.util.ArrayList : 10.3 ns (minimum 8.41 ns) [java] [test] Iterates over javolution.util.FastList : 14.7 ns (minimum 13.0 ns) [java] [test] Iterates over java.util.LinkedList : 23.1 ns (minimum 20.9 ns) [java] [test] Iterates over javolution.util.FastSet : 21.3 ns (minimum 19.4 ns) [java] [test] Iterates over java.util.HashSet : 29.0 ns (minimum 25.9 ns) [java] [info] [java] [info] - Put new key/value pairs to map instance - [java] [test] New javolution.util.FastMap.put(key, value) : 76.0 ns (minimum 65.3 ns) [java] [test] New java.util.HashMap.put(key, value) : 133 ns (minimum 118 ns) [java] [test] New java.util.LinkedHashMap.put(key, value) : 184 ns (minimum 161 ns) [java] [test] New javolution.UtilTestSuite$SharedFastMap.put(key, value) : 130 ns (minimum 117 ns) [java] [test] New java.util.concurrent.ConcurrentHashMap.put(key, value) : 367 ns (minimum 323 ns) [java] [test] Recycled javolution.util.FastMap.put(key, value) : 36.3 ns (minimum 32.0 ns) [java] [test] Recycled java.util.HashMap.put(key, value) : 107 ns (minimum 95.1 ns) [java] [test] Recycled java.util.LinkedHashMap.put(key, value) : 162 ns (minimum 150 ns) [java] [info] [java] [info] - Retrieves map value from key - [java] [test] javolution.util.FastMap.get(key): : 16.1 ns (minimum 14.9 ns) [java] [test] java.util.HashMap.get(key): : 14.6 ns (minimum 13.3 ns) [java] [test] java.util.LinkedHashMap.get(key): : 52.1 ns (minimum 48.3 ns) [java] [test] javolution.UtilTestSuite$SharedFastMap.get(key): : 56.9 ns (minimum 54.3 ns) [java] [test] java.util.concurrent.ConcurrentHashMap.get(key): : 59.2 ns (minimum 55.5 ns) [java] [info] [java] [info] - Removes keys from map - [java] [test] javolution.util.FastMap.remove(key): : 88.2 ns (minimum 75.1 ns) [java] [test] java.util.HashMap.remove(key): : 102 ns (minimum 91.9 ns) [java] [test] java.util.LinkedHashMap.remove(key): : 124 ns (minimum 114 ns) [java] [test] javolution.UtilTestSuite$SharedFastMap.remove(key): : 83.6 ns (minimum 75.2 ns) [java] [test] java.util.concurrent.ConcurrentHashMap.remove(key): : 235 ns (minimum 220 ns) [java] [info] [java] [info] - Iterates over map entries - [java] [test] Iterates over javolution.util.FastMap : 6.82 ns (minimum 5.53 ns) [java] [test] Iterates over java.util.HashMap : 15.5 ns (minimum 13.9 ns) [java] [test] Iterates over java.util.LinkedHashMap : 15.9 ns (minimum 13.7 ns) [java] [test] Iterates over javolution.UtilTestSuite$SharedFastMap : 21.1 ns (minimum 19.5 ns) [java] [test] Iterates over java.util.concurrent.ConcurrentHashMap : 42.6 ns (minimum 30.0 ns) [java] [info] [java] [info] - Direct collection/map iterations (no iterator) - [java] [test] javolution.util.FastTable.get(i) : 3.20 ns (minimum 2.99 ns) [java] [test] java.util.ArrayList.get(i) : 2.21 ns (minimum 1.98 ns) [java] [test] javolution.util.FastList.Node.getNext() : 3.56 ns (minimum 3.26 ns) [java] [test] javolution.util.FastMap.Entry.getNext() : 3.66 ns (minimum 3.32 ns) [java] [info] [java] [info] More tests coming soon...
Some classes are faster, others are slower (for example ArrayList.get(int)
is faster
with the -server
option, slower without it).
Overall, there is no significative difference in average execution time. The main advantage of Javolution collections is that they are time-deterministic (the maximum execution time is very close to the minimum execution time) and they are RTSJ-Safe.
They have some additional characteristics such as thread-safe without synchronization, support for custom key/value comparators, direct record iterations (faster than iterators), recyclable, reduced impact on GC (fragmentation or large arrays allocations), support for custom entry implementation (FastMap) or custom node implementation (FastList), etc.