为什么我可以成功指定超过物理内存大小的堆大小?

时间:2016-04-13 07:58:52

标签: jvm

0 0 2
0 0 2
0 0 0

我的macbook pro只能获得8GB的RAM,为什么JVM可以从100G的堆大小开始? enter image description here

1 个答案:

答案 0 :(得分:2)

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

这不是JVM独有的;其他过程也会这样做。