If I run
public static void main(String[] args) {
System.out.println("Heap size is " + Runtime.getRuntime().totalMemory() / 100000 / 10.0 + " MB");
}
with -mx8m on Java 7 update 25 64-bit I get
Heap size is 8.0 MB
but if I run with -mx2m I get
Heap size is 3.2 MB
So it does appear you get slightly more heap than you asked for for very small sizes. However, even for a small mobile device I wouldn't be worrying about every last MB because the JVM itself is much larger (can be over 100 MB of shared memory, thread etc)
i.e. if you can't spare a few MB, you won't be able to run the JVM anyway.