HotSpot VM 32位JVM,内存地址空间限制为4G,实际中java堆的大小还进一步受限于底层操作系统,Microsoft Windows上HotSport VM 最大可用的堆内存为1.5G。
对于liunx操作系统来说,HotSpot VM 在最新Linux内核上最大可用Java堆大约为2.5到3.0G。使用较早内核版本时大约为2G,
Solaris 上HotspotVM 最大可用堆为3.3G,实际消耗的最大内存地址空间随给定的Java应用和JVM版本而有所不同。
早期 64位 HotSpot VM 增大了Java堆内存,使的这些系统可以使用更多内存,虽然64位寻址对应用有帮助但也带来的另外的困难,VM内部Java对象的长度从32位变成64位,导致CPU高速缓存行,中可用的OOPS变少 ,从而降低了CPU缓存的效率,比32位JVM下降8%-15%。
Java6以后 HotSpot VM 添加了压缩指针,它通过对齐,还有偏移量,将64位指针压缩成32位,性能提高更节省空间,留出更多的CPU寄存器空间来使用。
寄存器空间有限,当变量超过CPU寄存器数,多出的活跃状态只能存放在内存中,因此避免寄存器卸载,可以让程序执行的更快。