当前位置: 首页 > 面试题库 >

剖析Java应用程序中内存使用情况的最佳方法?

符国安
2023-03-14
问题内容

我意识到之前在SO上已经问过类似的问题,但是让我准确描述一下我需要做的事情:

我有一组运行命令行Java应用程序的测试,我想向它们添加内存配置文件。我看到的一个选择是将代码(可能使用第三方工具/库)添加到应用程序中,以提供内存快照。另一种选择是使用第三方工具为我管理/安装我的应用程序和JVM(理想情况下不需要我更改代码)。我在想类似Valgrind的东西,但是对于Java。如果可能的话,也要开源。

我真正想做的是设置内存测试,以便定期监控我的内存使用情况(假设每秒一次),并将其转储到文本文件中。这样,我将能够查看内存使用率是否随时间波动/增加/减少。我还将能够计算最大和最小峰值。

这里有人做过这样的事情吗?

提前致谢。


问题答案:

使用JProfiler之类的东西,您要做的就是向JVM添加某些参数。它使用JVMTI。

我认为您应该阅读分析器,以及他们可以为您做些什么。我还建议阅读JVMTI。

JVMTM工具接口(JVM TI)是供工具使用的新的本机编程接口。它提供了一种检查状态并控制Java虚拟机(JVM)中运行的应用程序执行的方式。JVM
TI支持需要访问JVM状态的全部工具,包括但不限于:性能分析,调试,监视,线程分析和覆盖率分析工具。

注意:JVM
TI取代了Java虚拟机探查器接口(JVMPI)和Java虚拟机调试接口(JVMDI)。JVMPI和JVMDI将在J2SETM的下一个主要版本中删除。



 类似资料:
  • 问题内容: 最近,我对算法产生了兴趣,并通过编写一个简单的实现,然后以各种方式对其进行了优化来开始探索它们。 我已经熟悉了用于分析运行时的标准Python模块(对于大多数事情,我发现IPython中的timeit magic函数就足够了),但是我也对内存使用感兴趣,因此我也可以探索这些折衷方案(例如,缓存先前计算的值与根据需要重新计算它们的表的成本)。是否有一个模块可以为我配置给定功能的内存使用情

  • 如何配置我的应用程序引擎应用程序的内存(RAM)使用情况?我试图解决与超过实例内存限制相关的错误。我尝试过这些东西,到目前为止,它们不起作用或者不能提供我需要的东西。 Appstats。这不提供内存使用的详细信息 以上任何一点我都错了吗?在这个问题上,评分最高的答案(不是公认的答案)表示没有办法监控App Engine上的内存使用情况。那不可能是真的。可以吗? 编辑 我可以确认GAE mini p

  • 问题内容: 如何以编程方式找到我的Android应用程序上使用的内存? 我希望有一种方法可以做到。另外,我也该如何获得手机的空闲内存? 问题答案: 请注意,现代操作系统(如Linux)上的内存使用是一个极其复杂且难以理解的领域。实际上,你正确解释任何数字的机会非常低。(几乎每当我与其他工程师一起查看内存使用量数字时,对于它们的实际含义总会进行长时间的讨论,这只会导致模糊的结论。) 注意:我们现在有

  • 问题内容: 我想在一个Java进程中运行多个REST Web应用程序,以节省内存并借助Akka轻松扩展。我想估计每个请求处理程序消耗多少内存,并检测整个系统的危险情况。 是否有可能几乎实时监视该进程中的内存使用情况,并找出每个请求处理程序使用了多少内存?我需要实现什么?有什么工具吗? 是否有可能捕获并根据内存使用量执行某些操作,例如仅崩溃超过请求的内存限制的请求处理程序?如果是这样,那有什么不好呢

  • 问题内容: 是否有一个准则来估计a消耗的内存量? 寻找类似于这些准则的估计内存使用情况的东西。 问题答案: 如果您查看源代码中的字段,则有: 的评论说 用于存储规范的字符串表示形式(如果已计算)。 假设您不调用,它将保留为零字节。因此是(8 + 4 + 4)= 16个字节+ 。 本身是4 + 4 + 4 + 4 + 4 = 20字节+ 。 20 + 16总共提供了36个字节加上大小,该大小始终是表

  • 问题内容: 扩展基类时,Java中的内存使用情况如何。 子类是否包含基类的实例(具有其自身的开销和全部开销),还是仅具有其自身的16字节的开销? 那么,更具体地说,Bar实例的内存使用量是多少? 是吗 要不就 问题答案: 没有双重开销。 Java将采用该类,超类,计算所有字段所需的空间,并为一个实例分配所需的空间。 仅从内存的角度来看,根本不存在超类的概念,有Foo的实例仅需要一个int的内存,而