【发布时间】:2020-05-12 12:02:24
【问题描述】:
我在 Youtube 和 Pluralsight 上浏览了一些 Java Profiler 教程(JVisualVM、JProfiler、YourKit)。我对如何检查堆转储以及如何查找内存泄漏有了一些了解。但是这些所有教程都是初级的。
我的查询是,当我在堆转储中进行分析时,我只看到了 3 种类型的对象 char[], java.lang.String and java.lang.Object[],它们几乎覆盖了所有内存(总是超过 70%)。但我的申请中没有。
与线程转储的方式相同,我看到了 HTTP-8080 请求(我正在使用的端口),这将我引导至 Runnable()'s run method or Java Concurrent Package 并且再次没有指向我的项目的任何特定代码。
我也和一些朋友讨论了这个问题,也分析了他们的应用程序(没有遇到内存泄漏和性能方面的任何问题),但他们的结果几乎是一样的。
你们能否帮助了解如何在 JVisualVM 中为大型应用程序分析堆转储和线程转储?任何视频、博客、任何东西都会有所帮助。
我使用 OpenJDK-11、AWS ECS-Docker 和 Tomcat 作为网络服务器。
【问题讨论】:
-
字符串占据堆内存的很大一部分是正常的。教程应该已经向您展示了如何识别引用这些字符串的对象。
标签: java-11 heap-dump jvisualvm thread-dump