小编dot*_*p0T的帖子

重用对象实例与每次更新创建新对象

每次交换缓冲区时,重用对象实例与创建新实例之间有什么区别和缺陷?

背景:

这是我的游戏引擎项目.

我正在写一个TripleBuffer,我有三个版本的每个对象:旧版本,当前版本未来版本.将通过从当前版本读取状态并将更改应用于将来的版本来对这些对象进行更改.在对所有对象进行更改后(如果适用),将交换缓冲区:将来的对象成为当前对象,当前对象成为旧对象,还是旧对象?

  • 要么被丢弃,要通过迭代现在的对象来分配新对象
  • 或者成为现在的未来对象,并通过迭代现在的对象来更新它们的值(重新覆盖).

说明:

  • "重用":用新值覆盖旧实例的值,有效地改变实例的状态
  • "new ones/cloning":使用旧实例的数据创建新实例,并对其应用更改

使用案例:

假设大约1000个对象以30Hz交换,这意味着它们需要每秒重建30次,方法是克隆现有的对象,或者重用现在过时的旧对象(覆盖其所有状态).

它们的复杂程度可以从大约5个属性到数百个属性,并且总是具有至少2个级别深度.

(深度至少为2级 =缓冲对象本身只包含其他唯一对象的地图,这些对象组成了它们)

重新创建和重用都需要迭代当前对象及其组件(短于:反过来构成它们的对象).

进一步考虑:

在引擎的其他部分,将有事件触发和其他魔法,它们将使用对象的及时快照.因此,重新创建或重用的决定将导致:

  • 重新创建意味着我可以安全地传递对象的引用,因为对象在成为当前对象时将变为不可变
  • 重用意味着我将不得不创建当前对象的副本或我需要的任何部分的副本,因为我不能保证在对象被重用之前将处理事件(或其他)

java buffering

7
推荐指数
1
解决办法
4550
查看次数

如何使用现代logback获取MDC"继承"?

回到一个较旧的项目并开始更新其依赖项之后,我必须意识到自从版本以来,logback不再将MDC传播给子项1.1.5:https://github.com/qos-ch/logback/commit/aa7d584ecdb1638bfc4c7223f4a5ff92d5ee6273

这种变化使得大多数日志几乎无用.

虽然我可以理解链接问题中给出的论点,但我无法理解为什么这种更改不能以更向后兼容的方式进行(如java中通常常见的那样).

:除了必须将所有内容从Runnables子类化为Threads之外,实现相同行为的现在正确的方法是什么?

logback slf4j mdc

6
推荐指数
1
解决办法
950
查看次数

如何确保集合仅包含接口的每个实现之一

我有一个MyInterface具有众多实现和集合的接口Collection<MyInterface>.

现在怎么样,我可以保证的是有没有 2种元素在这集是同一类型的

如何我可以阻止任何进入被覆盖

意味着在任何给定的时间点只有集合中每个实现的1个实例.

出于显而易见的原因,我无法equals(Object obj)在界面中添加默认实现.我也不能以任何方式保证每个实现都会覆盖该equals(Object obj)方法(显而易见但是为了彻底性而在这里).

我目前看到的唯一方法是创建一个抽象类MyAbstractClass.但这似乎有点矫枉过正(?)

java collections instanceof

3
推荐指数
1
解决办法
128
查看次数

标签 统计

java ×2

buffering ×1

collections ×1

instanceof ×1

logback ×1

mdc ×1

slf4j ×1