There's a GC start/end event in JVM TI: http://docs.oracle.com/javase/7/docs/platform/jvmti/jvmti.html#GarbageCollectionStart It's been around for quite a while. Can be used in JDK 6. Can't execute Java code in the callback. The VM is in its stop-the-world phase when the event is sent.
From the document:
This event is sent while the VM is still stopped, thus the event handler must not use JNI functions and must not use JVM TI functions except those which specifically allow such use (see the raw monitor, memory management, and environment local storage functions).
The places that issue this event: