【问题标题】:Why do heap memory usage and number of loaded classes keep increasing?为什么堆内存使用量和加载类的数量不断增加?
【发布时间】:2015-09-15 12:12:25
【问题描述】:

我正在使用 JVM Explorer - link to JVM Explorer 来分析我的 Spring 应用程序。我有以下问题。

  • 为什么“已用堆内存”在应用程序之后仍持续增加 已启动但尚未收到任何请求? (图一)

  • 为什么即使在垃圾收集之后和接收任何请求之前 “已用堆内存”不断增加? (图2)

  • 为什么在垃圾回收之后,通过向应用程序发送一些请求加载的类的数量在增加?应用程序不应该使用以前的类吗?为什么它只是增加了几乎所有东西(堆,加载的类的数量)? (图3)

    应用程序启动后 - enlarge image

    点击“运行垃圾收集器”按钮后。 - enlarge image

在垃圾收集程序完成后向应用程序发送一些请求后 - enlarge image

【问题讨论】:

    标签: java spring spring-mvc memory profiling


    【解决方案1】:

    为什么“Used Heap Memory”在应用程序启动并且还没有收到任何请求后仍然不断增加? (图一)

    您的 JVM 中的某些东西正在创建对象。您将需要一个内存分析器来查看执行此操作的内容。它可以是 Swing、yoru 应用程序或其他库的一部分。

    顺便说一句,大多数分析工具都使用处理大量垃圾的 JMX。例如当我在我的一些应用程序上运行 FlightRecorder 或 VisualVM 时,它显示 JMX 监控正在创建大部分垃圾。

    为什么即使在垃圾收集之后和收到任何请求之前,“已用堆内存”仍会不断增加? (图2)

    任何创建对象的东西仍在创建对象。

    为什么在垃圾回收之后,通过向应用程序发送一些请求加载的类的数量在增加?

    类是延迟加载的。在你做某事之前,有些课程是不需要的。

    应用程序不应该使用以前的类吗?

    是的,但这并不意味着它不需要更多的课程。

    为什么它几乎增加了所有内容(堆、加载的类的数量)? (图3)

    您的应用程序正在做更多的工作。

    如果您不想知道应用程序在做什么,我建议使用 VisualVM 或 Flight Recorder 等内存分析器。我使用 YourKit 解决这类问题。

    注意:调整 Java 程序以使其不产生垃圾需要付出艰苦的努力,我想说大多数库只会在垃圾导致已知的性能问题时尝试减少垃圾。

    【讨论】:

    • 感谢您的回答,我尝试使用 VisualVM 但无法运行它。哪个分析器最适合与 Eclipse 集成?我与 VisualVM 相关的问题在这里stackoverflow.com/questions/31064849/…
    • @DanielNewton 我会说 eclipse 和 visual vm 是我遇到的第三个最喜欢的 IDE 和分析器。当我将 intellij 与 yourkit 一起使用时,我没有遇到任何问题。
    • 我知道飞行记录器怎么样?
    • @DanielNewtown 这是一个很好的分析器,但我不知道如何将它与 IDE 集成。
    【解决方案2】:

    我喜欢@PeterLawrey 的好答案,但是这里没有:

    内存主要用于使用,而不是备用可能您的应用程序编写得很好:它可以使用小内存,它可以重新创建它需要的所有内容,但它也可以有效地利用您的系统具有大量内存,应用程序使用所有可能的内存来更有效地工作。

    我可以很容易地想象出不断占用内存的东西是一个缓存。如果缓存包含大量数据,应用程序运行速度会更快。

    如果您没有像OutOfMemoryError 这样的问题,您不必担心。您仍应保持警惕并进一步检查,但您所描述的情况并不自动意味着有问题。

    类似于Windows用户不断的感叹“我买了更多的内存,但是我的Windows用完了”——内存在用就好了!这就是我们购买它的目的!

    【讨论】:

      猜你喜欢
      • 2014-04-16
      • 2023-03-29
      • 2017-09-17
      • 2011-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-14
      • 2014-07-11
      相关资源
      最近更新 更多