<分区>
我需要以编程方式准确找出给定 Java 对象占用的内存量,包括它引用的对象占用的内存。
我可以生成内存堆转储并使用工具分析结果。但是,生成堆转储需要花费大量时间,并且此类工具需要花费大量时间来读取转储以生成报告。考虑到我可能需要多次执行此操作,如果我可以在我的项目中添加一些代码来为我提供“运行时”值,我的工作会更加敏捷。
我怎样才能最好地实现这一目标?
ps:具体来说,我有一个 javax.xml.transform.Templates 类型的对象集合
<分区>
我需要以编程方式准确找出给定 Java 对象占用的内存量,包括它引用的对象占用的内存。
我可以生成内存堆转储并使用工具分析结果。但是,生成堆转储需要花费大量时间,并且此类工具需要花费大量时间来读取转储以生成报告。考虑到我可能需要多次执行此操作,如果我可以在我的项目中添加一些代码来为我提供“运行时”值,我的工作会更加敏捷。
我怎样才能最好地实现这一目标?
ps:具体来说,我有一个 javax.xml.transform.Templates 类型的对象集合
最佳答案
你需要为此使用反射。生成的代码片段太复杂,我无法在此处发布(尽管它很快将作为我正在构建的 GPL 工具包的一部分提供),但主要思想是:
您需要单独处理数组(8 个字节的 header 、4 个字节的长度字段、4*length 个字节的表,加上内部对象正在使用的任何内容)。您需要使用反射处理遍历字段(及其父字段)的其他类型的对象。
你还需要在递归过程中保留一组“看到”的对象,以免在多个地方引用多次对象。
关于java - 以编程方式计算 Java 对象占用的内存,包括它引用的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/757300/