threejs 影子属性
如果你们还没有注意到Dirk Lemmerman和我之间的(轻松) 摊牌 ,那么让我快速提及一下我们是如何做到这一点的。 首先,Dirk创建了JavaFX技巧23:“ 为属性保存内存阴影字段 ”,以帮助应用程序开发人员在使用JavaFX属性时节省内存。 知道您可以在不需要使用JavaFX Property对象的情况下节省内存,这一点令人印象深刻。
在查看代码时,我不禁注意到使我疯狂的样板代码,因此我决定制作一个简单的API,该API还考虑了Dirk示例中使用的有趣的Shadow Fields模式。 我创建的API(也称为属性访问器接口)包含默认方法,这些方法可以使开发人员轻松实现接口,而无需扩展抽象类来避免Java的单一继承规则。 要查看Property Accessor界面代码,我在此处进行博客介绍。 令我惊讶的是,Dirk创建了另一个博客条目来对这三种方法进行基准测试。 如果您跟上所有乐趣,则以下是到目前为止博客文章的时间顺序。
- 为 Dirk Lemmerman 保存属性的内存阴影字段
引入阴影场的概念 - JavaFX技巧来节省内存! 属性和可观察物的阴影场,作者:Carl Dea
我试图节省内存并减少样板代码。 - 阴影场与属性访问器接口 (作者Dirk Temmerman)
一个基准应用程序,用于测试具有属性和字段原始数据类型的对象的三种方法。 - 影子场与属性访问器接口第2轮,卡尔·迪亚(Carl Dea)
重新访问属性访问器接口以通过集中值映射来减少内存使用。
事实证明,根据上面的文章#3,即使膨胀的对象具有已实例化的属性字段,我的实现也是三个实例中最差的。 因为我匆匆忙忙进入事物,直到上述Dirk的帖子#3才知道这个问题。 好吧,我还没有准备好挥舞白旗 ,除了袖子,还有一些技巧。
接下来,您将看到我为减少Property Accessor接口策略的内存使用所做的工作。 要查看代码更改,请在此处的Github上查看代码。 我所做的唯一更改是集中了包含值的Map。 如您所见,与上面Dirk的帖子#3相比,内存要低得多。 但是,尽管我没有使用阴影字段击败Dirk的实现,但是我的表现比标准对象方法要好一些。
使用集中式映射的更新的Property Accessor Interface实现。
结论
尽管我只是通过从每个对象中删除哈希映射并将所有值集中到单个映射中进行了简单的更改,但是Property Accessor接口仍然没有像影子字段技术那样减少内存。 我可能会探索其他技术,例如弱引用或研究内存映射文件。 我怀疑我是否可以进一步减少工作量,但是我相信相对较小的应用程序可以使用Property Accessor界面快速构建应用程序。 他们(开发人员)可以使用适当的分页来避免出现大量列表。 最后一个想法是创建一个甚至可以减少样板代码的注释。
让我知道你的想法吗? 有什么建议?
翻译自: https://www.javacodegeeks.com/2016/04/shadow-fields-vs-property-accessor-interface-round-2.html
threejs 影子属性