1. Sort region list after mark and before calculate forwarding pointer, so that low garbage percentage regions are pushed to start of heap, and only objects in highly garbage percentage regions are moved.
2. Implement object reference stack at the end of each region to over come difficulty of call getNextObject.
3. Marked java.lang.ref classes and referent objects to put them into nonmoving space, since they can't be used before moved to target region.