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

javafx阴影

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

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

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

Undertow场

解决这个问题的方法是我最近看到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阴影

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/336073.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode 151. 翻转字符串里的单词

原题链接 题解思路&#xff0c;操作分解&#xff0c;先把整体翻转&#xff0c;然后使用双指针算法分割出单个单词再次进行翻转。 class Solution { public:string reverseWords(string s) {int k 0;//保存单词首字母位置for (int i 0; i < s.size(); i ) {if (s[i] )…

python斐波那契数列前20项_兔子繁殖问题带来的智商碾压:斐波那契数列趣谈

本文来自公众号&#xff1a;超级数学建模微信号 &#xff1a;supermodeling原文标题&#xff1a;斐波那契数列趣谈via 善科by BB一般认为斐波那契数列的提出是基于兔子的繁殖问题&#xff1a;如果一开始有一对兔子&#xff0c;它们每月生育一对兔子&#xff0c;小兔在出生后一个…

jboss使用_使用JBoss Cool Store的终极云零售指南

jboss使用我们一直在讨论为什么应用程序开发人员在App Dev Cloud Stack系列中不能再忽略其堆栈了。 带有JBoss Cool Store的App Dev Cloud 我们从头到尾讨论了各个层次&#xff0c;但尚未为您提供除Red Hat Container Development Kit&#xff08;CDK&#xff09;之外的任何应…

python基础论文_北大博士Python学习笔记,Python基础语法总结,一篇文章带你入门...

image.png网上现在Python学习资料有很多&#xff0c;但是很杂。很多初学Python的朋友就不知道该怎么去抉择&#xff0c;那些是自己当下所需要的。刚好朋友是北大的博士&#xff0c;在IT行业也工作八年了。就把他学习Python的笔记做了一些整理写下了本文。这份资料非常纯粹&…

C++ 11 深度学习(四)结构、权限修饰符

1.struct struct MyStruct {int a;char b; }; struct默认权限为public,其中最重要的是涉及到结构体数据对齐。 数据对齐&#xff0c;1.数据对齐是指存在处理结构体成员时&#xff0c;成员在内存中的起始地址编码必须是成员类型字节的整倍数。2.要以结构体中最深层的基本数据…

C++ 11 深度学习(五)类型转换:static_cast dynamic_cast const_cast reinterpret_cast

四种cast 通用形式&#xff1a;强制类型转换名<type>(express) 强制类型转换名&#xff0c;以上四种 &#xff1b;type:想要转成成的目标类型 &#xff1b; express&#xff0c;需要转换的目标 static_cast 内置数据类型转换&#xff0c;具有继承关系的指针和引用&am…

小程序triggerevent 传参_微信小程序——无限递归的层次列表

——上礼拜踩的坑1、关于为什么不直接操作DOM对象&#xff1f;因为微信小程序里没有document对象。2、为什么坑了这多时间&#xff1f;因为之前看了个过期的帖子&#xff0c;完美避开了解决方案。下面进入正文&#xff0c;需求是在微信小程序里构造一棵文件树。3、解决思路定义…

java ab工具_(ab)使用Java 8 FunctionalInterfaces作为本地方法

java ab工具如果您正在使用更高级的语言&#xff08;例如Scala或Ceylon&#xff0c;甚至JavaScript&#xff09;进行编程&#xff0c;则“嵌套函数”或“本地函数”是您非常常见的习惯用法。 例如&#xff0c;您将编写诸如fibonacci函数之类的东西&#xff1a; def f() {def …

C++ 11 深度学习(六)智能指针综述

以下三种智能指针均为类模板 1.shared_ptr 共享指针 &#xff0c;多个指针指向同一个对象&#xff0c;最后一个指针被销毁时&#xff0c;这个对象会被释放。 2.week_ptr 是辅助shared_ptr工作的 3.unique_ptr 是独占式指针&#xff0c;同一时间只能有一个指针能指向该对象…

python的仿真效果好吗_Python SimPy 仿真系列 (1)

本系列文章旨在介绍 SimPy 在工业仿真中的应用。在物流行业/工厂制造业/餐饮服务业存在大量急需优化的场景&#xff0c; 例如&#xff1a;如何最优化快递分拣人员的排班表以满足双十一突发的快递件量如何估算餐厅在用餐高峰的排队时长估算特定工序下&#xff0c;工厂生产所需要…

jax-rs jax-ws_您的JAX-RS API并非天生就等于:使用动态功能

jax-rs jax-ws这次&#xff0c;我们将讨论一些有关JAX-RS 2.0 API的内容&#xff0c;并涉及规范的一个非常有趣的方面&#xff1a; 动态功能及其实用性。 传统上&#xff0c;当配置和部署JAX-RS 2.0 API&#xff08;使用Application类&#xff0c;从servlet引导或通过RuntimeD…

10 NAT网络地址转换

广域网技术 上面聊的内容都是内网的一些配置&#xff0c;但内网终将要访问外网的&#xff0c;我们需要怎么处理呢&#xff1f;一般使用HDLC&#xff08;高级数据链路控制协议&#xff09;或者PPP&#xff08;点对点协议&#xff09;。 使用PPP安全接入Internet PPP&#xff0…

Leetcode 61. 旋转链表

原题链接 题解&#xff1a; 1.首先确定k的取值&#xff0c;可能超过链表长度&#xff0c;所有对 k%n 来确定 2.需要找到k前面的结点和最右位置的结点&#xff0c;可以使用双指针得到。 /*** Definition for singly-linked list.* struct ListNode {* int val;* Lis…

java应用性能指标_性能与可靠性:Java应用为何像F1汽车

java应用性能指标再想一想。 性能和可靠性相关吗&#xff1f; 还是这些东西相互排斥&#xff1f; 我认为是后者。 如今&#xff0c;现实是IT部门将应用程序的性能和可靠性视为同一事物&#xff0c;但这离事实还差得远。 让我们看看一级方程式车队如何管理性能和可靠性。 上赛…

tomcat ajp协议安全限制绕过漏洞_Apache Tomcat文件包含漏洞(CVE20201938)复现

一、漏洞背景2020年02月20日&#xff0c;国家信息安全漏洞共享平台(CNVD)发布了关于Apache Tomcat文件包含漏洞(CVE-2020-1938/CNVD-2020-10487)的安全公告。Tomcat作为一款免费开源轻量级的web应用服务器&#xff0c;广泛应用于并发量不是很高的场合&#xff0c;Tomact默认端口…

【H.264/AVC视频编解码技术】第三章【熵编码】

熵编码的概念 熵&#xff1a;化学与热力学概念&#xff0c;用于度量能量退化的指标。熵越高&#xff0c;物体/系统做工能力越低。 信息学中的熵&#xff1a;用于度量消息的平均信息量&#xff0c;和信息的不确定性。越是随机的&#xff0c;前后不相关的信息&#xff0c;其熵越…

mock 抛出一个异常如何终止_教你使用Mock完成单元测试

更多精彩文章请关注本人微信公众号1、什么是Mock?mock是在测试过程中&#xff0c;对于一些不容易构造/获取的对象&#xff0c;创建一个mock对象来模拟对象的行为。比如说你需要调用B服务&#xff0c;可是B服务还没有开发完成&#xff0c;那么你就可以将调用B服务的那部分给Moc…

jconsole查看连接数_在JConsole和VisualVM中查看DiagnosticCommandMBean

jconsole查看连接数我已经将JConsole用作合适的通用JMX客户端已有很多年了。 该工具通常随Oracle JDK一起提供&#xff0c;并且易于使用。 在JMX交互方面&#xff0c;JConsole优于VisualVM的最大优点是JConsole带有内置的MBeans选项卡&#xff0c;而必须为VisualVM中的相同功能…

剑指 Offer 40-----50

50. 第一个只出现一次的字符 原题链接 class Solution { public:char firstUniqChar(string s) {char res ;if(!s.size()) return res;unordered_map<char, int> mmp; for(int i 0; i < s.size(); i) {mmp[s[i]] 1;}for(int i 0; i < s.size(); i){if(mmp[s…

jpa root.join_JPA 2.1和Java EE 7中的JPQL增强功能(第1部分– JOIN ON)

jpa root.joinJava EE 7已经存在了几年&#xff0c;并且提供了一些非常有用且期待已久的功能&#xff0c;例如实体图以及对存储过程和结果映射的更好支持。 有关概述&#xff0c;请参阅Thorben Janssen的博客文章 。 但是&#xff0c;我想添加有关JPA查询语言功能的更详细的摘要…