ssm影城项目

卡尔·迪亚(Carl Dea)最近跟踪了我的一篇名为“ 保存内存”的博客文章! 为属性使用阴影字段 。 在他的博客中,他建议使用称为“属性访问器”的接口来消除大量使用样板代码所需的样板代码。 卡尔还提到他尚未用大量数据测试他的方法,他或某些读者可能会跟进性能比较。 所以它来了。

我编写了一个小型测试应用程序,该应用程序实现了卡尔在他的帖子中提到的三种策略:

  1. 在实例化类的同时实例化的标准属性
  2. 卡尔建议的属性访问器接口
  3. 我最近的博客文章中提出的阴影区域

该代码可以在GitHub上找到 。 (运行它时,请确保将初始堆大小和最大堆大小设置为2048 MB -ms2048m -mx2048m,否则内存分配会弄乱结果)。

该应用程序允许用户在询问或不询问属性的情况下执行这些策略。 它测量花费的时间和使用的内存。 应该注意的是,由于我使用System.currentTimeInMillis()Runtime.gc() ,因此测量结果不科学。 当运行几次时,我仍然会认为这些测试的质量值是可以接受的。

下面的第一个屏幕截图显示了当您创建1,000至2,000,000个Carl用于其博客的Employee类实例时获得的数量。 测试不会要求提供Employee可用的属性(姓名,权力,主管,奴才):

如您所见,“影子字段”策略是最快的,并且使用的内存量最少。 这是有道理的,因为“标准属性”策略总是创建那些胖属性对象,而“属性访问器接口”在内部管理每个模型对象的哈希映射。 只有“影子域”策略才能使用最少的数据结构。 对于选定的测试,它总共可以节省230 MB。 现在,如果您想象典型的应用程序具有许多模型类,并且其中许多类都比Employee测试类复杂得多,那么您可以想象可以节省多少内存。

下一个屏幕截图显示了当还访问Employee类中的所有四个属性和可观察对象时所进行的测量。

现在,“标准属性”策略是最快的,也是使用最少内存的策略。 再次讲得通,因为该策略现在针对给定的用例实现了完美的方法。 但是,“影子域”策略排在第二位。

结论

“属性访问器接口”策略成功地减少了阴影场所需的所有样板代码所产生的噪声,但我认为这样做的代价太高了,无法为创建多个模型对象的任何应用程序付钱。

PS:应该注意的是,当JVM的初始堆大小保留为其默认设置时,该比较甚至更支持“影子字段”策略。 在这种情况下,测试应用程序必须不断要求更多的堆空间,这是一项相当昂贵的操作。

翻译自: https://www.javacodegeeks.com/2016/04/shadow-fields-vs-property-accessor-interface.html

ssm影城项目

ssm影城项目_影场与属性访问器界面相关推荐

  1. 影场与属性访问器界面

    卡尔·迪亚(Carl Dea)最近跟踪了我的一篇名为" 保存内存"的博客文章! 为属性使用阴影字段 . 在他的博客中,他建议使用一个称为"属性访问器"的接口来消 ...

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

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

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

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

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

    如果你们还没有注意到Dirk Lemmerman和我之间的(轻松) 对决 ,那么让我快速提及一下我们是如何做到这一点的. 首先,Dirk创建了JavaFX技巧23:" 为属性保存内存阴影字段 ...

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

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

  6. 【Kotlin】属性 与 幕后字段 ( 属性声明 | 属性初始化器 | 属性访问器 | field 属性幕后字段 | lateinit 延迟初始化属性 )

    文章目录 I . 属性 字段 总结 II . 属性声明 III . 属性初始化器 IV . get / set 属性访问器 V . 属性幕后字段 field VI . 变量和常量的区别 VII . 延 ...

  7. SSM实战项目_青橙商城学习笔记和踩坑指南

    目的 本篇博客主要为了总结在学习开发实战项目中遇到的问题,提高自己的学习效率,也为其他遇到类似bug的后来者提供帮助. 2019/12/14.开篇就遇到tomcat启动问题:启动dubbo项目交替出现 ...

  8. 属性访问器(Property Accessor)----Setter/Getter

    Setter/Getter:属性/成员变量的封装 本质上是实例方法,但是在类的外部作为属性来访问,它允许创建只读和只写属性. 使用: getter方法:必须有返回类型,且和要访问的私有属性类型一致.必 ...

  9. 《js高级程序设计》6.1.1-6.1.3——数据属性、访问器属性

    数据属性:该属性包含了一个数据值的位置,它包含了4个描述行为的特性: 1. [[Configurable]]:表示是否能通过delete删除属性从而重新定义属性,能否修改属性的特性,能否把属性修改为访 ...

最新文章

  1. git放弃修改放弃增加文件
  2. 几种常见的模式识别算法
  3. 推荐一个当前互联网很火的技术
  4. h5 iframe显示不全_H5 唤醒APP小记
  5. error LNK1112错误: 模块计算机类型“x64”与目标计算机类型“X86”冲突
  6. RecyclerView列表控件漂亮时间线实现
  7. 中缀表达式计算、后缀表达式计算、中缀转后缀
  8. 2017年8个最流行的Web编程趋势
  9. Pygame最小开发框架
  10. elementui上传图片加参数_Vue + Element UI使用富文本编辑器
  11. java exe指的是什么_Java程序的执行过程中用到一套JDK工具,其中java.exe是指( )。
  12. java项目源码分享——适合新手练手的java项目
  13. JDBC 数据连接池
  14. 阿里巴巴日志处理系统
  15. 仿网易云音乐的YY音乐微信小程序源码
  16. 100base - CX/FX/LX/SX/ZX
  17. 20P44 Premiere预设600个摄像机动画信号干扰调色视觉特效pr模板
  18. 小程序scroll-view,滚动到最低_小程序滚动到底部
  19. 如何用计算机求特征值特征向量,特征值和特征向量计算器为4X4的实矩阵
  20. Macbook无法开机?如何尝试自救

热门文章

  1. jzoj3844-统计损失【树形dp,换根法】
  2. P4130,jzoj1214-[NOI2007]项链工厂【线段树】
  3. jzoj4671-World Tour【图论,bfs】
  4. LOJ dfs序1234
  5. MATLAB灰色预测
  6. 【LCT】旅游(P1505)
  7. 秀姿势(jzoj 3464)
  8. 洛谷-P2801 教主的魔法 分块
  9. Spring Cloud面试题(2020最新版)
  10. 关于Icon,Image,ImageIcon的简单的对比参考 上篇