Java 8中引入的属性和属性绑定是非常有用的编程概念。 当您开发用户界面时,它们特别有用。 实际上,它们是如此有用,以至于开发人员成为所有事物都应该是属性而不是原始属性的想法的受害者。 不幸的是,他们很容易忘记,诸如SimpleLongProperty之类的属性比诸如Long的标准类型要大得多。 当然,它们比诸如long的原始数据类型大得多。

在我当前的项目之一中,客户端使用的每个模型对象几乎都是由属性组成的。 对于许多这些模型对象,这是正确的方法,因为它们将通过JavaFX控件进行编辑/修改。 但是,还有许多未编辑的模型对象。 它们的存在是为了支持FlexGanttFX控件中计划的呈现。 这些对象不需要被观察,因此它们不需要提供属性……但是它们却这样做了,因为这样做,它们浪费了很多内存。

解决此问题的一种方法是重构模型类并摆脱所有属性,但是同样,我们可能想在以后的发行版中的不同上下文中使用这些对象,然后可能需要属性,因为我们要编辑它们直。 该怎么办?

暗影场

解决这个问题的方法是我最近看到Gerrit Grunwald在其Medusa项目的代码中所做的事情,以及Properties先生本人Michael Heinrichs 描述的一种模式 。 该模式使用的“影子字段”与属性中包装对象的类型相同。 使用此模式时,仅在确实需要时才创建属性(“有人请求时”)。

在此示例中,我们要管理一个名为“ title”的属性。 我们需要一个setter,一个getter和属性访问器。

private String _title = "Untitled"; // shadow fieldprivate StringProperty title;public final String getTitle() {title == null ? return _title : title.get();
}public final void setTitle(String newTitle) {if (title == null) {_title = newTitle;} else {title.set(newTitle);}
}public final StringProperty titleProperty() {if (title == null) {/// !!!! pass shadow field to constructortitle = new StringProperty(this, "title", _title);  }return title;
}

通过使用这种模式,我可以将项目中特定用例的内存占用空间从310 MB减少到250 MB。 保存的内存是我学生时计算机总内存的十倍。 想想看!

翻译自: https://www.javacodegeeks.com/2016/03/javafx-tip-23-save-memory-shadow-fields-properties.html

JavaFX技巧23:节省内存! 属性的阴影场相关推荐

  1. JavaFX技巧来节省内存! 属性和可观察物的阴影场

    在 JavaFX的世界中, Properties API允许UI开发人员将值绑定到UI控件. 这种功能非常容易,但是当对象模型经常使用属性时,应用程序可能会很快耗尽内存. 我通常会编写两个单独的对象, ...

  2. javafx阴影_JavaFX技巧来节省内存! 属性和可观察对象的阴影场

    javafx阴影 在 JavaFX的世界中, Properties API允许UI开发人员将值绑定到UI控件. 这种功能出奇的简单,但是当对象模型经常使用属性时,应用程序可能会很快耗尽内存. 我通常会 ...

  3. javafx阴影_JavaFX技巧23:节省内存! 属性的阴影场

    javafx阴影 Java 8中引入的属性和属性绑定是非常有用的编程概念. 当您开发用户界面时,它们特别有用. 实际上,它们是如此有用,以至于开发人员成为所有事物都应该是属性而不是原始属性的想法的受害 ...

  4. threejs 影子属性_影子场vs.属性访问器接口第2轮

    threejs 影子属性 如果你们还没有注意到Dirk Lemmerman和我之间的(轻松) 摊牌 ,那么让我快速提及一下我们是如何做到这一点的. 首先,Dirk创建了JavaFX技巧23:" ...

  5. 节省内存的嵌入式软件设计技巧

    现在新买的安卓千元机都是2G内存的了,我们还要绞尽脑汁地省内存?是的,那是高端处理器的特色,咱们这里讲的是资源紧缺型的嵌入式系统设计方法.一般主控是单片机控制器的电子产品的成本跟内存的关系可是成正比的 ...

  6. css阴影属性_第三场阴影场与属性访问器接口

    css阴影属性 这是" 影子字段与属性访问器"界面的 第3轮 . 如果您是新手,但不确定要怎么做,请查看我以前的文章或关于开发JavaFX应用程序时节省内存的第一篇文章 . 作为J ...

  7. 第三场阴影场与属性访问器接口

    这是" 影子字段与属性访问器"界面的 第3轮 . 如果您是新手,但不确定要怎么做,请查看我以前的文章或关于开发JavaFX应用程序时节省内存的第一篇文章 . 作为Java开发人员, ...

  8. python类与对象-如何为创建大量实例节省内存

    如何为创建大量实例节省内存 问题举例 在网络游戏中,定义玩家类Player(id, name, level...), 每个玩家在线将创建一个Player实例,当在线人数很多时,将产生大量实例, 如何降 ...

  9. 【MCU】一种单片机节省内存的方法(补充)

    1.聊一聊 以前听这首曲子内心会变得格外平静,然而现在却五味陈杂! 今天主要跟大家分享一个MCU省内存的办法,同时也欢迎大家在文末问答留言讨论. 2.读前必备 对于MCU节省内存办法大合集bug菌在很 ...

最新文章

  1. mysql rpc_使用XML-RPC和MySQL处理中文字符
  2. 博士大佬为机器学习总结的人工智能入门指南!
  3. python 获取打包后二进制所在目录
  4. es中的Plugin机制
  5. String 类型切割成数组-转int数组-升列排序-拼接字符串、需求 有如下一个字符串 91 27 46 38 50
  6. 技术系统进化法则是_()是技术系统所有进化法则的基础。
  7. Vue warn Failed to mount component: template or render function not defined
  8. java jpg结构_Java Class 字节码文件结构分析----附带逐字节码分析图
  9. 令人窒息的数学动态图
  10. 关于QueryRunner数据查询以及常用方法
  11. python美化输出模块_python日志处理模块
  12. SSH网上商城:回首网上商城
  13. 菜鸟 学注册机编写之 “序列号组合”
  14. 当债务危机遇上限贷放松 房价投资价值大不如前
  15. ctc decoder
  16. 未来计算机教师职业愿景展望,教师愿景与职业规划
  17. ISCC2021 Web WP
  18. 51单片机多路独立按键开关程序
  19. JBOX(jboxsjtueducn)
  20. java实现连续签到加分_java实现app签到功能

热门文章

  1. 实体类?Dao接口?Mapper映射文件?都别写了!!!用这种方法就可以
  2. ssh根据姓名查询的时候报错java.lang.IndexOutOfBoundsException: Remember that
  3. 使用ueditor实现多图片上传案例——Dao层(IShoppingDao)
  4. hibernate注解的测试
  5. 请求和响应向更多内容
  6. FE助手 json格式化 reslet client
  7. vue 字典_【开源】基于Vue的前端组件库HeyUI
  8. tomcat(9)Session管理
  9. Java bytecode instruction listings
  10. java集合框架——接口图+类图+遗留类图