性能优化前端优化浏览器app减少请求数合并CSS,JS,图片链接keepalive使用客户端缓存静态资源文件缓存在浏览器CacheControl和Expires启动压缩gzip等文本文件压缩率80左右,但是会给浏览器和服务器带来性能压力。需要权衡测试资源文件加载顺序浏览器会下载完所有CSS数据后才能开始加载页面,因此CSS文件放在最前面,JS放在最后面减少Cookie传输:每一次响应都会在服务器和浏览器中间传输尽量给用户提示CND加速 缓存静态资源,部署要求比较高可以考虑商用CDN反向代理缓存 静态分离等手段WEB组件分离 浏览器在同一个域名中有最大下载数量的限制。将不同类型的文件使用不同的域名来访问,这样可以有效的加快服务响应速度。应用优化缓存 缓存离用户越近越好。对于频繁修改的数据不要进行缓存,读写比例2:1以上,另外缓存的数据一般是热点数据,缓存存在部分时间不一致情况需要考虑。 使用缓存要考虑可用性问题。缓存预热缓存穿透布隆过滤器不存数据缓存分布式缓存与一致哈希异步处理 同步和异步:关注结果消息的通知机制 阻塞和非阻塞:关注返回结果的状态 综合四种情况同步阻塞、同步非阻塞、异步阻塞、异步非阻塞 bio、nio、aioservlet异步(servlet3)多线程开发消息队列集群化程序代码级别选择合适的数据结构选择更优的算法编写更少的代码并发编程 利用CPU多核,尽量使用线程池。合理设置线程数量使用JDK提供的各种并发框架和工具 实现线程安全的类,避免造成线程不安全问题。 尽量减少锁的竞争(缩小锁的颗粒度,读写锁、cas等手段)资源的复用单例模式池化技术(对比较昂贵的资源进行池化)JVM JIT(justintime)编译器线相关的优化热点编译的概念选择编译器类型server,clientXX:TieredCompilationclient模式热点编译开启的时间比较早server模式开启时间较晚(jdk1。7以后)TieredCompilation分层编译,启动时按照client模式,一段时间后在按照server模式代码缓存相关XX:ReservedCodeCacheSizeN编译阈值方法调用计数器:方法调用了多少次循环回边计数器:循环完成的次数编译线程方法内联XX:inline(设置是否开启内联默认开始)方法字节码小于325字节才会内联参数XX:MaxFreqInlinesSizeN方法下雨35个字节码一定会内联逃逸分析 GC调优 GC时间小,次数少大多数java应用不需要GC调优大部分需要GC的不是参数问题是代码问题GC调优是最后的手段GC调优的原则 1、根据应用选择合适的GC回收器 2、设置合适的堆大小 3、选择年轻代比例 步骤: 1、监控GC的状态 2、分析结果判断是否需要优化(下面的情况就不需要调优) minorGC时间50ms,10S一次 FullGC执行在1S以下,10分钟以上执行一次存储性能优化使用SSD硬盘定时清理数据或者按数据的性质分开存放结果集处理