efbp: Optimisations through JVisualVM instrumentation

These varied optimisations almost double performance when compared to
the statistics generated by the Throughput example when first committed.
Below are three runs in the configuration of 1 Bootstrap thread
processing 100,000 packets in batches of 100:

    Run 1:
        Produced for 45876426ns
        Consumed 100000 packets
        Network processing time: 220006917ns

    Run 2:
        Produced for 49285103ns
        Consumed 100000 packets
        Network processing time: 231349928ns

    Run 3:
        Produced for 48401149ns
        Consumed 100000 packets
        Network processing time: 235437145ns

The mean processing time for 100,000 packets with one thread therefore
is 228,931,330ns with a standard deviation of 6,527,388.26ns

Two Bootrap threads, 100,000 packets in batches of 100:

    Run 1:
        Produced for 62596885ns
        Consumed 100000 packets
        Network processing time: 220810878ns

    Run 2:
        Produced for 50694359ns
        Consumed 100000 packets
        Network processing time: 217375731ns

    Run 3:
        Produced for 47576364ns
        Consumed 100000 packets
        Network processing time: 245041142ns

This gives a mean of 227,742,583.67ns and a standard deviation of
12,312,057.75ns. Performance appears to be similar to the single-thread
arrangement. This is likely due to moving the producer to an IO job
rather than configuring it as a processing job.

Finally to compare with the original results - two Bootstrap threads,
100,000 packets with a batch size of 1,000 packets:

    Run 1:
        Produced for 53776504ns
        Consumed 100000 packets
        Network processing time: 195064245ns

    Run 2:
        Produced for 35428233ns
        Consumed 100000 packets
        Network processing time: 158641073ns

    Run 3:
        Produced for 38527018ns
        Consumed 100000 packets
        Network processing time: 156700585ns

The mean processing time here is 170,135,301ns with a standard deviation
of 17,645,217.67ns.

Insight against the previous result is only possible if we add another
test case: One Bootstrap thread, 100,000 packets with a batch size of
1,000:

    Run 1:
        Produced for 54195755ns
        Consumed 100000 packets
        Network processing time: 167552899ns

    Run 2:
        Produced for 41492646ns
        Consumed 100000 packets
        Network processing time: 149571081ns

    Run 3:
        Produced for 35886917ns
        Consumed 100000 packets
        Network processing time: 158258559ns

The moral of the story appears to be that bigger batch sizes reduce
overhead; probably not the most surprising result ever found. The runs
give a mean of 158,460,846.34ns with a standard deviation of
7,342,439.86ns.