Ree*_* D. 6 java memory virtual-machine
我有一个新的VPS来运行我和一些好友制作的一些java程序.我用这样的一行开始这个过程:
java -Xmx512M -jar program.jar
Run Code Online (Sandbox Code Playgroud)
在我们的旧VPS上,您可以使用'top'命令查看正在使用的虚拟和驻留内存量.它会使用600-700mb的虚拟内存.现在在我们的新VPS上,使用相同的命令,虚拟内存似乎总是比-Xmx值多出约2GB.因此,虚拟内存大约在600-700mb左右,而不是2700-3000mb.
旧的VPS运行CentOS 5.7,新的运行CentOS 6.2.两者都运行JRE 1.7u3 64bit.
为什么这样,我该如何解决?
编辑:顶部
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
27645 pyro 20 0 3003m 270m 10m S 5.0 1.7 1:19.18 java -Xmx512M -jar cserver.jar
Run Code Online (Sandbox Code Playgroud)
另一个编辑:我不怀疑为什么虚拟内存使用的内存比java命令行中指定的多.我在质疑为什么它比以前使用了更多.
堆并不是唯一消耗虚拟内存的东西。虚拟内存是应用程序拥有的地址空间量,而不是它正在使用的内存量(驻留是一个更好的指标)
虚拟内存包括所有线程堆栈空间、直接内存和内存映射文件。
我要检查的第一件事是应用程序使用的线程数,线程越多,虚拟内存就越多。