补充:当java程序new了一个对象时heap 区使用的水位线(brk)就会上升。此时需要去申请新的物理内存。如果物理有内存可用,就使用。如果物理内存用完了,则将物理内存中某些页淘汰到磁盘(如果那个页对应的是文件,这直接flush到磁盘,如果那个页是程序中的临时数据,则flush到磁盘的swap file交换文件,交换文件的大小和页是保持一致的),然后复用那个内存页。
生产环境为了避免使用交换分区,最好只跑一个程序。这样只需要保证heap内存小于总内存就好了
每个进程在启动的时候会分配一个虚拟地址空间。对于64位系统,寻址空间一般是2^48 (256T)(如图2),64位太大了用不了。相当于每个进程逻辑上可以访问256T的内存。