答案 0 :(得分:2)
之所以会发生这种情况,是因为大多数操作系统(包括OSX)都支持虚拟内存。在这种情况下,进程会向操作系统询问这么大的空间,并返回一些看似空间可用的东西。但是,内存被分成 pages (这是一种以块为单位服务的方式),并且操作系统仅在实际使用时将实际内存填充到那些页面。随着JVM开始使用越来越多的这些页面,它们将首先映射到物理内存,然后当内存无法放入物理内存时,将开始交换内存页面转到磁盘(直到磁盘用完,进程达到其极限,此时它被杀死)。
这不是JVM独有的;其他过程也会这样做。