See http://hg.openjdk.java.net/jdk/jdk/file/2e928420389d/src/hotspot/share/memory/virtualspace.cpp#l493
void ReservedHeapSpace::initialize_compressed_heap(const size_t size, size_t alignment, bool large) {
...
assert(HeapBaseMinAddress > 0, "sanity"); //<<<< HERE
==========
# This is OK
$ java -XX:HeapBaseMinAddress=0 -version
# This crashes with a fastdebug JVM
$ java -Xmx1024m -XX:HeapBaseMinAddress=0
# To suppress the following error report, specify this argument
# after -XX: or in .hotspotrc: SuppressErrorAt=/virtualspace.cpp:493
#
# A fatal error has been detected by the Java Runtime Environment:
#
# Internal Error (/home/iklam/jdk/abe/open/src/hotspot/share/memory/virtualspace.cpp:493), pid=20182, tid=20183
# assert(HeapBaseMinAddress > 0) failed: sanity
==========
http://hg.openjdk.java.net/jdk/jdk/file/2e928420389d/src/hotspot/share/runtime/arguments.cpp#l1768
There is code that ensures HeapBaseMinAddress >= DefaultHeapBaseMinAddress, but that happens only when MaxHeapSize is default, so the assert doesn't match the existing behavior.
The JVM works just fine if we remove the assert.