Memory usage

The system relies heavily on HashMaps to quickly find the rules that need to be fired.

Some fields only require a handful of rules where others have a lot of them.
This means that it depends on the fields that have been requested how many rules are kept in the system and
thus how much memory is used to store the rules in.
To get an idea of the relative memory impact of the rules needed for a specific field.

This table was constructed by running all testcases against the engine where we only request 1 field.
Then after forcing a GC in the JVM we retrieve the memory footprint.
Because there are no rules for the field __SyntaxError__ we assumed that to be the baseline
against which we determine the relative memory usage.

Because most rules determine several fields there is a lot of overlap in the rules used.
If you keep all rules we see that version 5.0 uses about 232 MiB of memory for all rules which shows that
the most expensive rules related to finding the DeviceName and DeviceBrand because both need
to determine the brand of the device at hand.