2013-05-27 88 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