优化性能注意事项
<!--[if !supportLists]-->1、 <!--[endif]-->非优化不可再优化—-------牵一发动全身。
<!--[if !supportLists]-->2、 <!--[endif]-->改动后仔细测试。
<!--[if !supportLists]-->3、 <!--[endif]-->在一台虚拟机上的优化方案,在其它厂商虚拟机上不一定有相同效果。
高性能编码注意事项
<!--[if !supportLists]-->1、 <!--[endif]-->设计(功能设计)----选择高效方案
针对同一功能模块一般有很多套方案可供选择,选择合适的一套方案实现(一般靠实现者的经验决定备选方案)
<!--[if !supportLists]-->2、 <!--[endif]-->将对象的创建成本降到最低:
对象分为轻型对象,重型对象:
轻型对象:只包含基本类型的对象
重型对象:包含其它对象做为属性,或有深层的继承关系
<!--[if !supportLists]-->3、 <!--[endif]-->合理设计类的继承深度
见意不得多于三层,深层的继承关系会对classloader在加载类时造成性能低下的问题。
<!--[if !supportLists]-->4、 <!--[endif]-->类的构造函数要短小精干
对象的创建和在内存中维护的成本很高,对象在内存中维护的信息尽量小些
<!--[if !supportLists]-->5、 <!--[endif]-->将对象的创建拖延到最后一刻
<!--[if !supportLists]-->6、 <!--[endif]-->可能的话要自己实现一个对象缓冲管理池,将对象的创建与回收控制在一个合理的范围内。
<!--[if !supportLists]-->7、 <!--[endif]-->降低同步带来的影响
同步对性能的影响一般比非同步高出1.5倍左右,应该减少同步的使用和减少同步的代码量
<!--[if !supportLists]-->8、 <!--[endif]-->尽量可能使用stack和基本类型完成必要的任务
使用stack和基本类型可大大提高性能,因为他可以减少对内存的访问次数,再者他的存取速度要高于对对象维护表中数据信息的存取速度
<!--[if !supportLists]-->9、 <!--[endif]-->使用static final private以促成inlining函数
使用以上三者有可能使函数成为内联函数,是否成为内联函数要看.class文件的大小,jvm中有一个检查文件大小的功能,如果文件小,在编译时以上三种类型函数被做为内联函数,否则不然.
<!--[if !supportLists]-->10、实例变量初始化一次就好
初始化同样也会占有cup时间周期,尽量相同的初始化只做一次,如基本类型定义时已经初jvm初始化,不必做重复工作。
<!--[if !supportLists]-->11、群集类对象处理
群集类型中存放在是对象 ,因此优先选择数组实现相同功能
遍历:size>enumeration>iterator=listiterator
复制:system.arraycopy()比其它方式快上2倍有余。不是决对,根据用户硬件软件环境决定。
优先选择数组:在不考虑数据同步的时候,优先考虑非同步群集类hashmap,arraylist,linklist
<!--[if !supportLists]-->12、尽量重用对象
<!--[if !supportLists]-->13、缓式评估技术(延尽加载):延缓可能不需要进行的工作。只做现在用到的工作,以后需要的以后再做(不是决)