对于下面的无操作码,
public class a {
public static void main(String args[]) throws Exception{
Thread.sleep(100000);
}
}如果我在64位jvm上运行它,通过"top“我可以看到它使用了2 2GB的虚拟内存。是什么占用了这些虚拟内存?这个例子可能有点奇怪,但是我们确实看到一些生产代码使用了大量的虚拟内存,以至于它超过了ulimit -v。
谢谢杨
发布于 2012-01-11 08:27:18
虚拟内存并不意味着它实际上已被分配和使用。这仅仅意味着它有那么多当前可寻址的地址,以便在需要时使用。
发布于 2012-01-11 15:58:44
当您启动一个Java应用程序时,它会在启动时创建它的堆(最大大小)。最近的Sun/Oracle JVM的缺省大小是主内存的1/4。这听起来很浪费,除非它所做的一切都是保留地址空间。考虑到每个应用程序都有自己的地址空间,这并不重要。(除非您有一个地址空间有限的32位JVM )
https://stackoverflow.com/questions/8812522
复制相似问题