经验篇
优化目标
减少体积
提高运行效率
sql语句 尽量使用批量
尽量指定final
尽量重用对象
使用局部变量
及时关闭流
尽量减少重复计算
尽量使用懒加载
对于Logger使用static创建,否则可能导致线程阻塞
使用对象作为HashMap的Key
web.xml增加版本配置信息
少用Thread.getStackTrace
正则运算尽量cache
Class.forName可能导致阻塞
反射调用转为原生调用
字符转字节
优化工具Jprofiler
架构优化:
动静分离 让用户请求尽量不经过后台,并且静态数据尽量离用户近
读写分层校验
秒杀系统的执行逻辑、静态数据放到cdn
增加多条件校验
支持峰值100W/s的QPS
将整个页面cache在浏览器 刷新 强刷购买按钮
链路优化
请求合并
控制页面大小
通过答题分散流量
域名收敛
DNS CDN本地
SPDY 本地长连接
图片本地缓存
合理的预加载机制
数据分级
减少加载
减少大小
短板:
光速
网络
网路结构
内存\cpu \io
合并部署 弹性部署
抛出异常首先要创建一个新的对象,Throwable接口的构造函数调用名为fillInStackTrace()的本地同步方 法,fillInStackTrace()方法检查堆栈,收集调用跟踪信息。只要有异常被抛出,Java虚拟机就必须调整调用堆栈,因为在处理过程中创建 了一个新的对象。异常只能用于错误处理,不应该用来控制程序流程。
如果能估计到待添加的内容长度,为底层以数组方式实现的集合、工具类指定初始长度
比如ArrayList、LinkedLlist、StringBuilder、StringBuffer、HashMap、
10、当复制大量数据时,使用System.arraycopy()命令
11、乘法和除法使用移位操作
for (int i = 1; i <= count; i++)
{
Object obj = new Object();
}
Object obj = null;
for (int i = 0; i <= count; i++)
{
obj = new Object();
}
使用单例可以减轻加载的负担、缩短加载的时间、提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面:
(1)控制资源的使用,通过线程同步来控制资源的并发访问
(2)控制实例的产生,以达到节约资源的目的
(3)控制数据的共享,在不建立直接关联的条件下,让多个不相关的进程或线程之间实现通信
尽量避免随意使用静态变量
https://blog.youkuaiyun.com/u013322876/article/details/84190584