开发者社区> 问答> 正文

JFR是如何处理事件数据的存储和持久化的?

JFR是如何处理事件数据的存储和持久化的?

展开
收起
萝卜丝丸子 2024-08-28 14:09:18 9 0
2 条回答
写回答
取消 提交回答
  • JFR将事件数据首先保存在线程变量缓存中,这些数据随后会被转移到一个global ring buffer。当global ring buffer写满时,才会被一个周期性的线程持久化到磁盘。

    2024-08-28 15:44:02
    赞同 55 展开评论 打赏
  • 我个人理解的话,它应该是采用了内存缓冲的机制,首先将事件数据存储在内存中的环形缓冲区(ring buffer)。这个设计允许高效地添加新数据而不需要频繁地重新分配内存空间。当缓冲区满时,最旧的数据会被自动覆盖,从而确保了即使在长时间运行或高事件产生率的情况下,系统也不会因为JFR而耗尽内存。
    并且为了减少对应用性能的影响,JFR通常以异步的方式将内存缓冲区中的数据写入到磁盘文件中。这意味着数据收集和应用运行可以并行进行,避免了直接写磁盘操作可能引起的阻塞。在写入磁盘之前,JFR可能会对数据进行一定程度的压缩,以减少存储空间的需求。数据以一种高效的二进制格式存储,这种格式专为快速读取和分析设计,同时也支持数据的长期存档

    image.png

    参考文档

    2024-08-28 15:15:04
    赞同 48 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载