java - 如何在 Maven 构建中查找峰值内存使用情况

标签 java maven

我需要找出 maven 构建的峰值内存使用情况,我可以依赖成功的 maven 构建给出的最终输出吗? 43M 表示 maven 构建期间的内存使用峰值。提前致谢。

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 16.222 s
[INFO] Finished at: 2017-07-31T19:10:04+05:30
[INFO] Final Memory: 43M/636M
[INFO] ------------------------------------------------------------------------

最佳答案

这里:

Final Memory: 43M/636M

43M 是 JVM 在构建结束时使用的内存,636M 是当前分配的内存(堆大小)。
但是这些信息不能给你峰值。

为什么使用的内存(43M)不能算是峰值?

  • 因为峰值可能发生在构建结束之前。

为什么不能将堆大小 (636M) 视为峰值?

  • 因为如果 GC 减少峰值和构建结束之间的堆大小,峰值可能优于堆大小。
    对于在开始时执行密集任务然后执行较轻任务的非常长的构建可能就是这种情况。

  • 因为如果 GC 将堆大小增加到此值,峰值可能低于堆大小,但应用程序永远不需要消耗那么多内存。

要在 maven 构建执行期间获得内存峰值,请使用专为 JVisualVM 或 JConsole 设计的任何 JVM 工具监控 Java 应用程序(maven 执行)。

这是由 JVisualVM 监控的 Spring Boot 应用程序的 Maven 构建的屏幕截图,显示构建结束时堆大小或已用大小都不是峰值:

enter image description here

关于java - 如何在 Maven 构建中查找峰值内存使用情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45418317/

相关文章:

java - 在 Maven 中指定 Java 版本 - 属性和编译器插件之间的差异

java - Maven - 将集成测试与单元测试分开

java - 如何在 Eclipse 中包含 javax.jms.*?

javascript - 在 Selenium Webdriver 中使用 Ctrl + 单击组合打开一个新选项卡

java - 如何将Android应用程序部署到多部电话?

java - 如何在 JUnit 测试中覆盖私有(private)方法

java - Spring MVC @RequestMapping 对于类级别和方法级别不起作用

maven - 使用 Gradle 构建 Maven 插件

java - 我已经使用 maven 构建了一个 jar 文件,但无法在 linux 中使用 "java"命令执行它

java - 如何使用java小程序来屏蔽divx源(带有示例)?