Java JFR 民间指南 - 事件详解 - jdk.ThreadAllocationStatistics (4)

统计线程的分配内存的大小方法即 cooked_allocated_bytes() 方法的源码如下:
thread.inline.hpp

inline jlong Thread::cooked_allocated_bytes() { //原子读取 _allocated_bytes jlong allocated_bytes = Atomic::load_acquire(&_allocated_bytes); //如果开启了 TLAB(默认开启),则需要查看下当前线程的 TLAB 已经分配的对象大小 if (UseTLAB) { //统计当前线程的 TLAB 已经分配的大小 size_t used_bytes = tlab().used_bytes(); //如果当前 TLAB 在初始化,或者全局 TLAB 在初始化,会发生 used_bytes > max_size 的情况,忽略这种情况。 if (used_bytes <= ThreadLocalAllocBuffer::max_size_in_bytes()) { //这样统计其实有可能有点问题,即发生 TLAB retire 的时候,_allocated_bytes 会加上 used_bytes 之后申请一个新的 TLAB,这时候调用这个方法可能会把这个 used_bytes 加了两遍 return allocated_bytes + used_bytes; } } return allocated_bytes; }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zydpxz.html