What is Compressed oops in the Hotspot JVM? It's a pointer to an object. They are stored in the Java heap. Not all of them are pointers to objects, but also e.g. pointers to fields in objects. Before Java 6u23 pointers have size corresponding with platform (32 bites or 64 bites) by default.
So unfortunately, on a 64 bites platform, applications need bigger heap.
In Java 7 by default, for heap smaller than 32GB, pointers are saved as 32 bites offset from the address of heap beginning. For bigger heaps pointers are addressed with 64 bites.