JFR将事件数据首先保存在线程变量缓存中,这些数据随后会被转移到一个global ring buffer。当global ring buffer写满时,才会被一个周期性的线程持久化到磁盘。
我个人理解的话,它应该是采用了内存缓冲的机制,首先将事件数据存储在内存中的环形缓冲区(ring buffer)。这个设计允许高效地添加新数据而不需要频繁地重新分配内存空间。当缓冲区满时,最旧的数据会被自动覆盖,从而确保了即使在长时间运行或高事件产生率的情况下,系统也不会因为JFR而耗尽内存。
并且为了减少对应用性能的影响,JFR通常以异步的方式将内存缓冲区中的数据写入到磁盘文件中。这意味着数据收集和应用运行可以并行进行,避免了直接写磁盘操作可能引起的阻塞。在写入磁盘之前,JFR可能会对数据进行一定程度的压缩,以减少存储空间的需求。数据以一种高效的二进制格式存储,这种格式专为快速读取和分析设计,同时也支持数据的长期存档
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。