1、优先考虑用静态工厂方法代替构造器
2、遇到多个构造器参数时要考虑使用构建器Builder
解决参数过多,不可变类型。私有构造方法,静态类的构造方法提供必要参数,剩下可选。new xxx.build()
3、用私有构造器或者枚举类型强化Singleton属性。
单例:无状态。
实现单例如果实现序列化接口,可能会在序列化和反序列化导致有多个实例产生。
枚举的实现方法可以解决,但是枚举不太好去继承。
枚举是目前最佳实现单例的方法。
4、通过私有构造器强化不可实例化的能力
5、优先考虑依赖注入来引用资源。
资源都是单例,可能依赖多个。
6、避免创建不必要的对象。
比如正则要反复用,就弄个静态常量pattern。有限状态机编译耗性能。
优先使用基本类型,主要因为不小心使用自动装箱拆箱的代码导致问题。
7、消除过期的对象引用
注意内存泄漏,数组里面对对象的引用,Map,集合等等。设置为null,清空对象引用是一种例外,而不是规范。最好的办法靠GC,不再引用。
只要类是自己管理内存,就要警惕内存泄漏!
内存泄露来源:自己管理内存,缓存,监听器和其他回调。
监听器和其他回调:你实现一个api,客户端注册,却没有取消注册。应该用弱引用。weakHashMap,可以让当有外部引用某个key,就不会被回收。
8、不要调用finalize和cleaner的方法。
不可预期,不安全(finalizer attack),性能差。
9、优先调用try-with-resource,而不是try-finally,try-with-resource也可以捕获异常,而且要求实现autoclose.try-finally如果需要同时开启多个资源,后抛出的异常会覆盖掉前面的,比如close抛出的异常。try-with-resource只是禁止异常,堆栈会提示异常被禁止。

最新文章

  1. mysqli_fetch_assoc php的新的库函数
  2. JavaScript类库---JQuery(一)
  3. HealthKit的使用
  4. FMDB浅析
  5. 我为什么反对推荐新人编程C/C++语言入门?
  6. php 面向对象的方式访问数据库
  7. js遍历
  8. 【LeetCode】11. Container With Most Water
  9. rysnc,scp与bashrc冲突问题
  10. IOS NSURLRequest 设置 Header
  11. 新手学js的效果图1---( 淘宝等商城货物查看特效)
  12. hdu1541 Stars 树状数组
  13. sudoku--设想
  14. 网络编程-Socket介绍
  15. 定时任务redis锁+自定义lambda优化提取冗余代码
  16. Oracle性能优化5-索引的不足
  17. 初学者问题一oracle
  18. HDU 1242 Rescue (BFS+优先队列)
  19. with(上下文的用法)以及其他知识点
  20. java中boolean类型占几个字节

热门文章

  1. nginx 重写去掉index.php
  2. centos7 在虚拟机中装好后的网络连接问题
  3. 【Java基础】面向对象中
  4. 天梯赛练习 L3-011 直捣黄龙 (30分) dijkstra + dfs
  5. Nginx基础知识学习(安装/进程模型/事件处理机制/详细配置/定时切割日志)
  6. Linux学习笔记 | 常见错误之VMware启动linux后一直黑屏
  7. o_direct刷新方式和文件系统支持Direct i/o
  8. 关于QTableWidget中单元格拖拽实现
  9. SpringBoot WebSocket技术
  10. pandas DataFrame的新增行列,修改、删除、筛选、判断元素以及转置操作