public void exec() {
        try {
            final TaskContext taskContext = taskContextFactory.current();

            LOGGER.info("Java Heap Histogram Statistics job started");
            taskContext.info(() -> "Java Heap Histogram Statistics job started");
            Instant startTme = Instant.now();
            final List<HeapHistogramService.HeapHistogramEntry> heapHistogramEntries =
                    heapHistogramService.generateHeapHistogram();
            processHistogramEntries(heapHistogramEntries);
            LOGGER.info("Java Heap Histogram Statistics job completed in {}",
                    Duration.between(startTme, Instant.now()).toString());
            taskContext.info(() -> LogUtil.message("Java Heap Histogram Statistics job completed in {}",
                    Duration.between(startTme, Instant.now()).toString()));
        } catch (final RuntimeException e) {
            LOGGER.error("Error executing scheduled Heap Histogram job", e);
            throw e;
        }
    }
Class for running scheduled jobs to execute a jmap heap histogram and load the results into
the {@link InternalStatisticsReceiver}. This is for use in identifying memory issues at run time
by capturing a regular snapshot of both the number of instances of classes and the bytes in use.
<p>
As with all internal statistics it is reliant on the stat key being configured in stroom properties
(i.e. stroomCoreServerPropertyContext
stroom-node/stroom-node-impl/src/main/java/stroom/node/impl/HeapHistogramStatisticsExecutor.java