2013-05-27 59 views
0

我在Ubuntu服务器上运行Java程序。我使用命令行参数为Java堆分配了最大2560 MB的Java堆,并将最大值为128 MB的Java分配给了Java PermGen。大约一个小时后,我去看看内存使用情况。从Java应用程序内部看,它仍然分配了大约2500 MB的堆,但在Ubuntu中,它看起来像JVM使用的是3500 MB!Java内存处理

这怎么可能?当然JVM不应该使用堆+ permgen +多一点堆栈和其他一些小东西。

回答

0

如果它是一个多线程应用程序,每个线程将有自己的堆栈。如果你为线程的堆栈内存提供参数-xss,那么它很可能。

+1

你至少需要几百个线程来捆绑这么多的堆栈空间。 – cHao

+0

@cHao如果他在服务器端有几百个客户端并且为每个客户端分配,就会发生这种情况:读者+作者+工作者线程 – 2013-05-27 16:45:40

+0

@matheszabi:Eh。人们必须*尝试*浪费线程才能拿出这样的设计。但我猜。 – cHao