预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共68页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

数年Java经验与学习总结 历时三年完善 原理 阿姆达尔定律 使用多核CPU对系统进行优化,CPU数量越 木桶原理多,串行化比重越低,则优化效果越好。 性能指标与性能表现 •执行速度 •执行时间 •程序反应是否迅速,响应时间是 •CPU时间否足够短 •内存分配 •内存分配•是否过多地消耗内存或者存在泄 漏。 •磁盘吞吐量•启动时间 •启动到可正常处理业务需要花费 •网络吞吐量多长时间 •负载承受能力 •响应时间•系统压力上升时,系统执行速度、 响应时间上升曲线是否平缓 思路 路线——区域 设计调优 代码调优 深入=精细 JVM调优 基本=高效收益比低 数据库调优 收益比高 操作系统调优 第一篇实现高性能JAVA系统 第一准则 •良好的编程习惯易读 性能 –前提:满足性能要求易维护? 要求 –很多很好的程序设计模式 –阅读优秀的代码,形成习惯 •优化的第一准则:不要优化 •优化的第二准则(仅限于专家),还是不 要优化 –from《架构之美》 设计代码 JVM 架构设计 •分而治之 –可对各部分进行最佳优化 –分层 –分区 –分模块 •高性能架构 –应用无状态 –有效使用缓存 –应用垂直拆分 –数据库垂直拆分 –异步通信 –非结构化数据存储如HBase、Cassandra等NoSQL 程序设计 •空间换时间 •时间换空间 •性能设计模式 •多核下并发设计 空间换时间 •Buffer –缓解应用程序上下层之间的性能差异 –BufferedWriter/..InputStream/..OutputStream •Cache –暂存处理结果(数据),减少重复处理的时间 –EhCache/OSCache/JBossCache –分布式缓存Memcached/Redis/TT/Terracotta… •复用 –对象池 –数据库连接池(c3p0/proxool) 时间换空间 •算法优化 –压缩数据,减小网络传输等,如lzo,snappy –数据量大,容易swap,优化算法,减少存储需 求 •一般在嵌入式设备中 –硬件的快速发展,问题越来越小 性能设计模式 •单例模式——减少GC –频繁使用的对象 –大对象 •代理模式 –延迟加载 –远程调用的网络代理 –屏蔽安全处理弱的组件 –动态加载技术(JDK反射、CGLIB、Javaassist、ASM) •享元模式 –共享对象:复用大对象、节约空间和时间 –SaaS 性能设计模式 •装饰者模式 –分离性能组件和功能组件 –增强:比如增加buffer等 •观察者模式 –通过事件监听、通知发布 –同步变异步 •ValueObject模式 –将需要交互的信息封装为一个对象 –减少网络/远程传输的交互次数 性能设计模式 •业务代理模式 –JEE的远程调用模式 –将业务流程封装在前台系统 多核下并发设计——模式 •多线程设计模式 –Future •异步处理,实现:JDK中的FutureTask –Master-Worker •分解子任务并行执行,Master进程不需要等待所有子任 务完成就可以部分汇总 –GuardedSupension •仅当服务器有处理能力才服务,一般通过队列缓冲 –不变模式 •通过回避多线程竞争来处理并发控制 –生产者-消费者 •核心组件:共享内存缓冲区 多核下并发设计——JDK并发框架与优化 •Executor框架 –Executors工厂类 –内部都是实现了ThreadPoolExecutor •优化线程池大小 –线程池大小:Nthreads=Ncpu*Ucpu*(Wait/Compute) •CopyOnWriteList –读取操作相比直接同步提高一倍以上性能 –用于读多写少 •CocurrentHashMap •ConcurrentLinkedQueue –高并发能保持良好性能 •BlockingQueue –简化多线程间数据共享 •并发Deque –LinkedBlockingDeque,性能低于LinkedBlockingQueue –ArrayDeque、LinkedList不是线程安全的 多核下并发设计——并发控制方法 •volatile –保证所有线程都即时写回主内存 –server模式下不使用volatile的有趣现象 •synchronized –notify,wait.. •ReentrantLock –可中断、可定时 –公平、非公平 –要主动释放 –lock、lockInterruptibly、tryLock、unlock •ReadWriteLock –读写分离、提高并发 •Condition –与lock关联的,lock.newCondition可获得 –await、