在不使用本机代码的情况下跟踪Java堆

杜克情人

我有一段时间摆弄Java堆。使用JVMTI,我们可以跟踪Java堆。

但是有什么方法可以使用纯Java实现相同的目标吗?

我正在使用Java工具和asm框架在运行时进行类转换。

我的目标是跟踪创建的每个对象,这意味着我需要定期检查它们的大小。我可以检查是否使用asm创建了新对象。我需要检查从堆空间创建的对象的大小。

在这方面有什么建议吗?

于2013年12月28日编辑

好的,尽管它可能不是最好的解决方案,但我能够从ASM进行一些操作(最好的方法是JVMTI我完全同意)。

我必须重写visitVarInsn(对于局部变量),visitFieldInsn(对于实例和类变量)和visitTypeInsn(对于NEWNEWARRAY创建对象)

每次创建新对象时,我都会记录该对象(是的,这不是我知道的好方法,这可能会导致资源泄漏。如果有更好的解决方案,请告诉我。我非常需要它[:( ]),然后定期检查对象大小。

您能给我提供更好的选择吗?(正如Stephen正确指出的那样,该对象记录绝对不会起作用,但是我JVMTI对[:(])都不满意。此外,请原谅我的无知,我找不到合适的MXBean方法。

MemoryMXBean具有getHeapMemoryUsage(),但我无法通过此方法跟踪单个对象的大小。也许我应该写我自己的MBean

霍尔格

由于使用的是Instrumentation,因此您已经可以访问一个API,该API告诉您对象的大小。Instrumentation用于修改类的字节码的同一类提供了该方法getObjectSize(Object)

您提到的有关对象跟踪的资源泄漏很容易解决。只需将对象放入WeakReferences中即可。然后,您可以使用ReferenceQueue来了解对象何时已被垃圾回收,这是您要跟踪堆使用情况时的重要功能。

但是我不太确定您要实现什么目标。

顺便说一句,据我所知,JVisualVM并没有使用JVMTI。但是,JVisualVM也不跟踪每个对象。完整堆分析需要堆转储。可以使用MXBean名称"com.sun.management:type=HotSpotDiagnostic"为的方法来发送方法调用dumpHeap(String outputFile, boolean live)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使此代码在不使用匿名函数的情况下运行

来自分类Dev

Maven:在不使用父级的情况下重用代码

来自分类Dev

Java system.in可以在不使用线程的情况下与输入源代码同时工作吗

来自分类Dev

在不使用Java调用的情况下启动Java程序

来自分类Dev

yum在不使用Java的情况下安装Libreoffice Writer

来自分类Dev

在不使用系统时间的情况下以Java获取UTC

来自分类Dev

在不使用数据库的情况下跟踪登录尝试-ASP Net C#

来自分类Dev

如何在不使用setInterval的情况下跟踪Slingshot上传进度的变化?

来自分类Dev

在不使用 java.io.File 的情况下从持久化的 Groovy 代码中返回值

来自分类Dev

在不使用./的情况下运行命令

来自分类Dev

如何在Android中不使用Xamarin的情况下使用Mono运行C#代码?

来自分类Dev

在不使用OpenNTF Domino API的情况下使用重定向到XPages登录代码段

来自分类Dev

在不使用OpenNTF Domino API的情况下使用重定向到XPages登录代码段

来自分类Dev

如何在不使用 len() 的情况下使用累积模式计算代码中的字符数?

来自分类Dev

在不使用带有本机对话框的Android上使用Facebook登录按钮的情况下登录Facebook

来自分类Dev

在不使用带有本机对话框的Android上使用Facebook登录按钮的情况下登录Facebook

来自分类Dev

如何在不使用基类的情况下封装WCF服务的代码?

来自分类Dev

在不使用条件代码的情况下确定数字是奇数还是偶数

来自分类Dev

如何在不使用scalac的情况下编译Scala代码

来自分类Dev

如何在不使用制表符的情况下缩进python代码块

来自分类Dev

如何在不使用php exec的情况下通过浏览器运行代码接收

来自分类Dev

如何在不使用Python的情况下打印出用于执行代码的命令

来自分类Dev

在不使用xcode的情况下对同一源代码进行MultiBranding

来自分类Dev

尝试在不使用转换概念的情况下呈现此代码

来自分类Dev

在不使用js.erb的情况下从操作返回js代码

来自分类Dev

在不使用条件代码的情况下确定数字是奇数还是偶数

来自分类Dev

如何在不使用如此复杂的for循环的情况下迭代此代码?

来自分类Dev

如何在不使用循环的情况下以紧凑高效的方式编写此代码?

来自分类Dev

如何在不使用:not选择器的情况下编写CSS代码?

Related 相关文章

  1. 1

    使此代码在不使用匿名函数的情况下运行

  2. 2

    Maven:在不使用父级的情况下重用代码

  3. 3

    Java system.in可以在不使用线程的情况下与输入源代码同时工作吗

  4. 4

    在不使用Java调用的情况下启动Java程序

  5. 5

    yum在不使用Java的情况下安装Libreoffice Writer

  6. 6

    在不使用系统时间的情况下以Java获取UTC

  7. 7

    在不使用数据库的情况下跟踪登录尝试-ASP Net C#

  8. 8

    如何在不使用setInterval的情况下跟踪Slingshot上传进度的变化?

  9. 9

    在不使用 java.io.File 的情况下从持久化的 Groovy 代码中返回值

  10. 10

    在不使用./的情况下运行命令

  11. 11

    如何在Android中不使用Xamarin的情况下使用Mono运行C#代码?

  12. 12

    在不使用OpenNTF Domino API的情况下使用重定向到XPages登录代码段

  13. 13

    在不使用OpenNTF Domino API的情况下使用重定向到XPages登录代码段

  14. 14

    如何在不使用 len() 的情况下使用累积模式计算代码中的字符数?

  15. 15

    在不使用带有本机对话框的Android上使用Facebook登录按钮的情况下登录Facebook

  16. 16

    在不使用带有本机对话框的Android上使用Facebook登录按钮的情况下登录Facebook

  17. 17

    如何在不使用基类的情况下封装WCF服务的代码?

  18. 18

    在不使用条件代码的情况下确定数字是奇数还是偶数

  19. 19

    如何在不使用scalac的情况下编译Scala代码

  20. 20

    如何在不使用制表符的情况下缩进python代码块

  21. 21

    如何在不使用php exec的情况下通过浏览器运行代码接收

  22. 22

    如何在不使用Python的情况下打印出用于执行代码的命令

  23. 23

    在不使用xcode的情况下对同一源代码进行MultiBranding

  24. 24

    尝试在不使用转换概念的情况下呈现此代码

  25. 25

    在不使用js.erb的情况下从操作返回js代码

  26. 26

    在不使用条件代码的情况下确定数字是奇数还是偶数

  27. 27

    如何在不使用如此复杂的for循环的情况下迭代此代码?

  28. 28

    如何在不使用循环的情况下以紧凑高效的方式编写此代码?

  29. 29

    如何在不使用:not选择器的情况下编写CSS代码?

热门标签

归档