先假controller定采用单例模式,通常两种设计方式来存放 HttpServletRequest、HttpServletResponse 等对象,一是利用一个类似于 ActionContext 的对象然后用 ThreadLocal 绑定到当前线程,这种方式仍然要创建 ActionContext 对象,空间消耗并不比jfinal现在的controler模式少;二是不将 ActionContext 实例化,而是在 ActionContext 中使用多个 ThreadLocal 分别存放  HttpServletRequest、HttpServletResponse 等等请求上下文对象,采用多个 ThreadLocal 存放和读取 request、response 等对象的性能远不如 jfinal controller中的 getRequest()、getResponse(),并且通常这些对象是需要多次获取,所以需要多次从 ThreadLocal 中获取,并且在本次请求结束后需要在 finally 块中使用 threadLocal.remove() 掉这些对象,这也会消耗性能。

所以 Controller 做成单例,一是仍然无法避免 new 出对象来,二是从threadLocal中取数据性能远不如getter 方法,现在的服务器都是大内存,用空间换时间已成为更好的选择。

再假设 Controller 采用非单例模式,如果在 controller 定义了属性值,天然就可以避免线程安全问题。至于内存空间消耗可以精确地计算出来,Controller 类共有八个属性,其中三个是 static 全局共享的那么 Controller 对象占用内存情况:

Controller对象占用内存 = 对象头 + 属性指针 + 对齐填充 = 8 + 4*5 +  4 = 32Bytes

JVM存放每个字符使用 2个字节,那么一个controller对象仅相当于一个 16 个字符的String而已。

假定你的服务器每天接受 1亿次请求,创建 controller 需要的内存为:32Bytes * 1亿 = 2.98GB,一亿次请求创建Controller对象只需要 2.89GB内存,并且JVM 有自动回收内存的机制。相对于整个调用堆栈 controller 所占内存可以忽略不计,例如通常一次数据库访问 find(sql) 出来的数据所占内存远比多次创建 controller 对象要占用内存多得多。

最新文章

  1. SqlServer windowss身份登陆和sa身份登陆
  2. Java基础-多线程编程-1.随便选择两个城市作为预选旅游目标。实现两个独立的线程分别显示10次城市名,每次显示后休眠一段随机时间(1000ms以内),哪个先显示完毕,就决定去哪个城市。分别用Runnable接口和Thread类实现。
  3. php 设计模式
  4. memory corruption
  5. 2 Add Two Numbers
  6. eclipse运行一个类却运行的是另外一个类,报无法加载的类
  7. embarcadero radstudio xe5 正式版 下载地址
  8. 提高Java代码质量:使用枚举定义常量(转)
  9. [BZOJ 3622]已经没有什么好害怕的了
  10. GPU(CUDA)学习日记(十一)------ 深入理解CUDA线程层次以及关于设置线程数的思考
  11. PHP 关于回调的用法
  12. 关于asp.net MVC 中的TryUpdateModel方法
  13. BeautifulSoup在Windows下安装(running 2to3)
  14. uitabbarController tababr 上方横线隐藏
  15. js把星期由数字转换为星期名称
  16. RabbitMQ消息队列(六):使用主题进行消息分发
  17. 【工具】Idea GenerateAllSetter
  18. 朱晔的互联网架构实践心得S2E3:品味Kubernetes的设计理念
  19. 5款最好的免费在线网站CSS验证器
  20. 2018.11.18 bzoj2194: 快速傅立叶之二(fft)

热门文章

  1. 2015/12/29 eclipse应用 输出三角形
  2. Hibernate中Criteria的完整用法?
  3. YTU 2916: Shape系列-2
  4. AngularJS 指令实践指南(二)
  5. C# ref和out总结
  6. 并不对劲的bzoj4651:loj2084:uoj220:p1173:[NOI2016]网格
  7. linux块设备模型架构框架
  8. 洛谷 P1072 Hankson 的趣味题 —— 质因数分解
  9. .NET Core 跨平台物联网开发:上报属性(三)
  10. [POI2008]BLO-Blockade 【无向图tarjan/鸽点】By cellur925