【问题标题】:vm size (task manager) vs. heap size java applicationvm 大小(任务管理器)与堆大小 java 应用程序
【发布时间】:2011-10-03 12:26:45
【问题描述】:

我想在 Java 1.5 应用程序中查找内存泄漏。我使用 JProfiler 进行分析。 我看到使用 Windows 的任务管理器,我的应用程序的 vm 大小约为 790000KB(从大约 300000KB 增加)。在分析器中,我看到分配的堆是 266MB(也在增加)。

这可能是一个菜鸟问题,但是,除了堆之外还有什么可以占用如此多的内存以使其达到大约 700MB vm 大小(或私有字节大小)?

我提到大约有 1200 个线程正在运行,根据here 的回答,可能会占用相当多的内存,但我认为在 700MB 之前仍有一些空间。顺便问一下,如何查看线程堆栈占用了多少内存?

谢谢。

【问题讨论】:

    标签: java memory-leaks profiling heap-memory


    【解决方案1】:

    JVM 可以使用大量可能不使用常驻内存的虚拟内存。在启动时,它会分配堆,并在其共享库中进行映射。加载的类使用 Perm Gen 空间。应用程序可以使用与堆最大值一样大的直接内存。在创建每个线程时,会为每个线程分配一个堆栈。在每种情况下,在使用此内存之前,它可能不会分配给应用程序,即不使用物理内存。随着应用程序的升温,更多的虚拟内存可以变成物理内存。

    如果您认为您的 JVM 没有高效运行,我首先要尝试的是 Java 6,它自 Java 5.0 的上一个版本以来已经进行了许多修复和改进。

    【讨论】:

    • 谢谢。我无法切换到 Java 6。问题可能不是 JVM,而是我的应用程序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-06
    • 2013-01-19
    • 1970-01-01
    • 1970-01-01
    • 2011-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多