我想在Java 1.5应用程序中找到内存泄漏。我使用JProfiler进行分析。 我看到使用windows的任务管理器我的应用程序的vm大小约为790000KB(从大约300000KB增加)。在分析器中,我看到分配的堆是266MB(也在增加)。
可能这是一个菜鸟问题但是,除了堆之外还有什么可以占用这么多内存以便它大约达到700MB vm(或私有字节大小)?
我提到大约有1200个线程正在运行,根据here的答案可以占用,但是我认为在700MB之前还有一些空间。顺便问一下,我如何看到线程堆栈占用多少内存?
感谢。
答案 0 :(得分:0)
JVM可以使用很多可能不使用驻留内存的虚拟内存。在启动时,它会分配堆,并在其共享库中进行映射。加载的类使用Perm Gen空间。应用程序可以使用直接内存,它可以与堆最大值一样大。在创建每个线程时,为每个线程分配一个堆栈。在每种情况下,直到使用该存储器,它可能不会被分配给应用程序,即不使用物理存储器。随着应用程序的升温,更多的虚拟内存可以成为物理内存。
如果您认为您的JVM没有高效运行,我首先要尝试的是Java 6,自上一版Java 5.0以来,它已经有很多修复和改进。