private static void benchmark(KeyValueLookup keyValueLookup, ExecutorService executor) throws InterruptedException, ExecutionException {

        int numObjects = 100000;
        System.out.println("Running benchmark for '" + numObjects
                + "' objects of type 'String' with implementation '"
                + keyValueLookup + "'");

        // Init test Objects
        //
        Map<String,String> objects = new HashMap<String, String>(numObjects);
        for (int i = 0; i < numObjects; i++) {
            objects.put(UUID.randomUUID().toString(), new String("Test value " + i));
        }

        LinkedHashMap<Integer, LinkedHashMap<KeyValueLookup, LinkedHashMap<BenchmarkAction, Long>>> resultMap = new LinkedHashMap<Integer, LinkedHashMap<KeyValueLookup, LinkedHashMap<BenchmarkAction, Long>>>();

        

        // Insert
        doAction(BenchmarkAction.Insert, keyValueLookup, objects, resultMap, executor);

        // Lookup
        doAction(BenchmarkAction.Lookup, keyValueLookup, objects, resultMap, executor);

        // Remove
        doAction(BenchmarkAction.Remove, keyValueLookup, objects, resultMap, executor);

        

        System.out.println("\n\n");
        System.out.println("Results at a glance");
        System.out.println("====================");
        for (Entry<Integer, LinkedHashMap<KeyValueLookup, LinkedHashMap<BenchmarkAction, Long>>> entry : resultMap
                .entrySet()) {
            System.out.println("Run with '" + entry.getKey() + "' objects: ");
            for (Entry<KeyValueLookup, LinkedHashMap<BenchmarkAction, Long>> typeEntry : entry
                    .getValue().entrySet()) {

                System.out.println(typeEntry.getKey().getClass().getName()
                        + ":");
                System.out.println("-----------------------");
                for (Entry<BenchmarkAction, Long> timeEntry : typeEntry
                        .getValue().entrySet()) {
                    System.out.println(timeEntry.getKey().toString() + ": "
                            + timeEntry.getValue() + "ms");
                }
                System.out.println();
            }
        }
    }