全系列目录:通过 JFR 与日志深入探索 JVM - 总览篇
上一篇我们详细的分析了 TLAB 的原理以及生命周期,并且提出 JFR 相关的两个事件:在线程分配对象时,如果 TLAB 不够,则根据最大允许浪费空间,决定是回收当前 TLAB 还是重新获取一个 TLAB 进行分配还是直接在堆上分配。jdk.ObjectAllocationOutsideTLAB
代表直接在堆上分配,jdk.ObjectAllocationInNewTLAB
代表回收+重新获取 TLAB 进行分配。
我们也提到了,jdk.ObjectAllocationOutsideTLAB
是我们需要关心的,jdk.ObjectAllocationInNewTLAB
是我们不太需要关心,但是可以通过这个事件学习 TLAB 原理的。在详细说明这两种 JFR 事件之前,我们先来看看 TLAB 涉及到的各种 JVM 日志。
TLAB 相关 JVM 日志
先按照之前的章节,准备好 Java WhiteBox API。之后,编写测试代码:
//对于字节数组对象头占用16字节
private static final int BYTE_ARRAY_OVERHEAD = 16;
//我们要测试的对象大小是100kb
private static final int OBJECT_SIZE = 100 * 1024;
//需要使用静态field,而不是方法内本地变量,否则编译后循环内的new byte[]全部会被省略
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。