Java,JVM和OS以及交换

Cri*_*ris 2 java jvm solaris

我想知道我是否启动了一个java虚拟机:

-Xms2048m -Xmx2048m -XX:PermSize=256m -XX:MaxPermSize=256m 
-XX:+UseParallelGC -XX:ParallelGCThreads=4 -XX:+UseParallelOldGC 
-XX:LargePageSizeInBytes=4m -XX:-BindGCTaskThreadsToCPUs 
Run Code Online (Sandbox Code Playgroud)

所以我用-Xms等于-Xmx启动服务器我java OS进程将从操作系统"保留"内存为好?因此,这个JVM将有2GB的空间,如果操作系统有它,那么它将允许进程启动,否则没有.

有没有可能在JVM启动后用2GB来使用os的交换内存?

(所以如果它最初没有使用交换内存就开始)

Pet*_*rey 5

这将在启动时使用大约2400 MB的虚拟内存.它永远不会回馈虚拟内存.它可以回馈主存,但很少.

有没有可能在JVM启动后用2GB来使用os的交换内存?

技术是的,但在实践中这是一个非常糟糕的主意.GC执行时假定它可以随机访问所有内存.如果JVM开始交换,它可能会长时间停机(很多分钟)甚至挂起机器.

鉴于您可以以200美元的价格购买32 GB,通常可以根据您的需求购买足够的内存.

  • @Cris虚拟内存对于进程是虚拟的,因为操作系统可以(几乎总是)执行它认为必要的操作.如果另一个进程启动并要求足够的内存超出计算机的物理内存,操作系统将不得不交换一些内存页面,并且通常会为更长时间运行的进程执行此操作. (2认同)