【问题标题】:Used and free Memory in JavaJava 中已使用和释放的内存
【发布时间】:2012-03-26 16:13:07
【问题描述】:

我正在尝试提高我的网络应用程序的性能,因此我决定对其进行分析。
执行此操作时,我注意到在启动任务管理器时完成一个漫长的过程后,我看到 java.exe 占用了太多内存。

顺便说一句,我在进程完成后 2-3 小时后检查过它,并且 cpu 处于稳定状态。
我在分析器的 VM 元素视图中看到,已用内存为 5 GB,可用内存为 15 GB,在任务管理器中 java.exe 使用的总内存为 41国标
这是什么空闲内存?
是不是像现在这么多内存会被 java 占用?
我注意到,随着进程开始并运行,使用的内存和可用内存都会增加,但完成后使用的内存会减少,但可用内存不会减少。
我想知道我的应用程序有什么问题还是正常?

【问题讨论】:

  • 在写问题时,不要将非代码文本封装成代码样式。这很丑陋,不是强调重要部分的好方法。
  • 没有冒犯,但我认为您应该首先检查 jvm 调整是如何完成的,以及在分析您的 java 应用程序时要查看的内容。
  • 您是说您的最大堆大小为 64 GB,并且您的机器具有 96 或更多 GC?
  • @PeterLawrey 我不知道我的最大堆大小是多少。但我看到了我写的东西。使用的内存为 5 GB 和 15 GB 可用内存。该机器包含 100 GB RAM。
  • 你确定它是 100 GB,因为这是一个不寻常的数字,除非你有虚拟机?

标签: java performance memory memory-management memory-leaks


【解决方案1】:

分析器通常显示堆内存使用情况。因此,可能正在使用 5 GB 的堆,并且有 15 GB 可用。任务管理器显示进程使用的总内存,包括堆内存和非堆内存,例如 Sun JVM 中的“Perm Gen”内存。 以下帖子收集了很多资源,可以详细了解这一点。

Java Memory explained (SUN JVM)

【讨论】:

    【解决方案2】:

    您确定这是 GB 而不是 MB?我并不是要暗示任何事情,但对于您尚未分析的系统来说,这是一个巨大的内存量。而且我很想知道这是用 Java 编写并消耗那么多内存的应用程序类型。我们有这些大型 ram 服务器在工作,但我们为医院系统运行 EMR 系统,一次有 1000 名用户(运行 Java...)。

    如果它实际上是 GB,那么您有一个巨大的代码库或在 ram 中存储了很多对象。可能还有很多无法被 GC 消耗的对象分配。

    如果我正确理解了您的工具,则说明 Java 正在保留系统内存,但尚未将其分配给对象。这将是你的免费公羊。已用内存是代码库和内存中的对象消耗的内存。 Java 有时会保留当前未使用的 ram,并且不会将其释放到操作系统以确保内存地址的连续性(防止 ram 碎片)。 迈克

    【讨论】:

    • 是的,迈克尔,我确信它在 GB 中。我的机器有 100 GB RAM。
    【解决方案3】:

    当您启动服务器 JVM 时,它默认将最大堆大小设置为内存的 1/4,但我怀疑您已将最大堆大小设置为 40 GB。

    JVM 会在启动时保留这么多虚拟内存,但在应用程序使用之前,操作系统不会将内存分配给应用程序。

    这意味着您可以将最大值设置为 80 GB,它会立即使用 80 GB 的虚拟内存(即使对于 hello world 程序也是如此)实际使用的内存可能要少得多。

    在您的情况下,堆大小已增长到 20 GB(被应用程序触及),您正在使用 5 GB 而未使用 15 GB。如果您使用更多内存,堆大小可能会增加到 40 GB。

    【讨论】:

    • 那么在不需要这么多内存的情况下,即使进程完成也不会释放这块内存?
    • 当JVM存在时,所有内存都会被释放。未使用的内存可以交换到磁盘并重新使用主内存,但这通常是一个坏主意。如果您使用高达 20 GB 的内存,您的 Full GC 时间是多少?顺便说一句:Azul JVM 是我所知道的唯一一个将内存返回给操作系统的 JVM。
    • 完整的 GC 时间约为 14 分钟。有关系吗?
    • 这令人印象深刻。 ;) 取决于应用程序,这并不重要。我更习惯于竭尽全力避免 GC 的系统,即使它们需要几毫秒。我只是好奇。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-17
    • 1970-01-01
    相关资源
    最近更新 更多