[英]how can I do java object allocation tracing from with code
我正在使用Java事件探查器来检查GC性能-但是它非常容易出错。 我真正想做的是在我的应用程序中嵌入一些真实世界的配置文件。 时间分析非常简单-即标记时间和减去时间,但是我找不到从内存中做任何事情的方法。
本质上-我想做一个这样的功能:
ProfileResult profile( Runnable function)
这给了我有关内存分配的信息,即分配了多少个对象,分配了多少个字节以及其中有多少可以被垃圾回收。
我要结束的是在CI系统中进行的测试,这些测试基本上使诸如函数之类的事情烦恼,从而增加了其内存压力……而且绝对正确—他们实际上知道,这个新函数比旧函数分配了200个字节-这不仅是随机的时间,在其他线程中可能还会发生其他各种事情,或者可能发生了垃圾回收等等。
这可能吗? 我知道JVM具有内置的性能分析功能-是否可以从正在运行的程序中访问它-还是有其他方法可以实现我想要的功能?
可以将JVM堆转储的分析集成到CI中,并(假设)为您提供所需的所有信息。
想法很简单,您要在测试功能前后进行堆转储。 然后,您可以分析差异并声明要测试的代码的某些SLA。
过去,我曾进行过自动堆转储分析,以验证正确的资源处理方式。 一些实用程序代码可以作为开源https://github.com/aragozin/heapunit/获得 。 但是,该库不支持基于堆差异的分析。
使用基于堆转储的方法可能还有其他缺点
如果您只需要跟踪单线程上一段代码分配的字节数,请查看此代码段,它使用的是通过JMX提供的每个线程分配计数器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.