2011-07-12 74 views
1

我想在Java 1.5應用程序中發現內存泄漏。我使用JProfiler進行分析。 我看到使用Windows的任務管理器,我的應用程序的虛擬機大小約爲790000KB(從約300000KB增加)。在分析器中,我看到分配的堆是266MB(也在增加)。vm大小(任務管理器)與堆大小Java應用程序

也許這是一個菜鳥問題,但是除堆之外還有什麼可以佔用如此多的內存以至於大約700MB vm大小(或者私有字節大小)?

我提到大約有1200個線程正在運行,根據here的回答可以佔用相當多的內存,但我認爲在700MB之前還有一些空間。順便說一句,我如何看看線程堆棧佔用多少內存?

謝謝。

回答

0

JVM可以使用很多可能不使用駐留內存的虛擬內存。在啓動時,它會分配堆,並在其共享庫中映射。加載的類使用Perm Gen空間。應用程序可以使用與堆最大一樣大的直接內存。隨着每個線程的創建,爲每個線程分配一個堆棧。在每種情況下,直到使用此內存時,它可能不會分配給應用程序,即不使用物理內存。隨着應用程序升溫,更多的虛擬內存可以成爲物理內存。

如果您認爲您的JVM沒有高效運行,那麼我會嘗試的第一件事是自上一版Java 5.0以來已經進行了許多修復和改進的Java 6。

+0

謝謝。我無法切換到Java 6.可能不是JVM是問題,而是我的應用程序。 – ovdsrn