【发布时间】:2021-06-07 17:00:48
【问题描述】:
我正在查看LogbackMDCAdapter 的实现,它跟踪lastOperation 我不明白这样做的原因,有人知道为什么这样做吗?
还有,为什么需要duplicateAndInsertNewMap?
【问题讨论】:
标签: java logback thread-local mdc
我正在查看LogbackMDCAdapter 的实现,它跟踪lastOperation 我不明白这样做的原因,有人知道为什么这样做吗?
还有,为什么需要duplicateAndInsertNewMap?
【问题讨论】:
标签: java logback thread-local mdc
根据here 的评论,为了序列化目的需要复制地图
每次添加一个值时,都会创建一个新的地图实例。这 是确定序列化过程将在 更新地图并且不发送对旧地图的引用,因此不允许 远程 logback 组件以查看最新更改。
这是指ObjectOutputStream 发送对先前写入对象而不是完整对象的引用的行为,除非使用writeUnshared 方法。
除非有get/put 组合,否则为什么可以跳过复制并不是很明显,但显然即使您连续有多个put 操作,只要仅复制映射,序列化就会正常工作当put/remove 在get 之后执行时。所以这是一个performance optimization,以避免在将多个项目放入其中时不必要地复制地图。
【讨论】: