- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
java性能调优
Java性能调优浅谈@Will提纲一些相关原理性能测量指标性能优化模式代码调优JVM调优…性能测量指标 - 1各类资源消耗情况: 磁盘IO 内存占用 CPU 数据库 网络 锁竞争 …性能测量指标 - 2性能测量指标 - 3其他最常用的两个指标(OLTP vs. OLAP) 吞吐量 延迟(或响应时间)低延迟不一定意味着高吞吐量 从山西到广州运煤,一列火车100小时(包括往返)可以运输 10000t 煤,而一架飞机20小时(包括往返)可以运输100t煤。并发度 = 吞吐量 * 延迟 比如一个系统处理某种任务的延迟为1ms,吞吐量为 1000tps, 那么并发度就为1/1000 * 1000 = 1,即单线程模型。一些相关原理80/20原则木桶原理 系统最终性能取决于系统中性能最差的组件,应该关注性能最 差的组件。Amdahl定律 定义了串行化系统并行化后的加速比公式(加速比越大,系统 并行化优化效果越好): 加速比 = 优化前系统耗时 / 优化后系统耗时 假设加速比为Speedup,系统串行化比率(串行执行代码所占比例)为F,CPU数目为N: Speedup = 1 / (F + (1 - F) / N) 即当N一定时,F越小,加速比上限越大。 性能优化模式设计模式缓冲缓存池化时空互换并行化协议优化…性能优化模式 – 单例模式单例模式 减少频繁创建对象开销、减少内存消耗从而减轻GC压力性能优化模式 – 代理模式1延迟重量级对象创建,加快启动速度性能优化模式 – 代理模式2动态代理模式不同实现性能比较 ASM方式实现的动态代理函数调用性能最高,但需要对字节码很熟悉,并且不利于维护JDK本身动态代理函数调用性能最差,而且不够灵活JDK本身动态代理对象创建性能最高,因为使用native的defineClass()方法Java Assist和CGLib实现的动态代理函数调用性能优于JDK动态代理,一般推荐用这两种实现动态代理性能优化模式 – 代理模式3动态代理模式的实际应用 Hibernate使用CGLib动态代理实现,达到延迟加载对象的属性(延迟访问数据库)目的:HibernateProxy接口CGLib的xy.LazyLoader?接口可以方便地用于实现对象延迟加载性能优化模式 – 享元模式与单例模式作用类似,避免对象重复创建开销性能优化模式 – Value Object模式RMI调用中将多个请求零散信息的请求合并成只请求一个Value Object 比如请求订单信息场景,将getOrderId、getOrderNum等合并成getOrder。Order就是Value Object。性能优化模式 – 缓冲1缓冲可以协调上层组件和下层组件的性能差,当上层组件性能优于下层组件时,可以有效减少上层组件对下层组件的等待时间性能优化模式 – 缓冲2生产者消费者模式性能优化模式 – 缓冲3Java IO中读写文件缓冲,有无缓冲性能差为18倍(积分系统中同样写一个77MB的文件,无缓冲18s,有缓冲1s)性能优化模式 – 缓冲4性能优化模式 – 缓存本地缓存分布式缓存 Redis、Memcached 避免缓存穿透,比如有大量的null请求穿透Cache,则考虑为null也作Cache程序的时间局部性原理 性能优化模式 – 池化如果一个类的实例对象被频繁使用,那么不必每次都生成新实例,可以将这些类的实例保存在一个池中,可以大大减轻创建对象和销毁对象开销数据库连接池线程池对象池 性能优化模式 – 时空互换1时间换空间内存资源紧张实例:不使用第三个变量交换两个变量 性能优化模式 – 时空互换2空间换时间最常见常用算法:缓存、Hash、查表法 …实例:计算一个字符串数组中出现次数最多的字符串 性能优化模式 – 并行化多进程多线程: 线程池最佳线程数目 =(线程等待时间与线程CPU时间之比 + 1)* CPU数目实例 : 从磁盘串行和并行读取 30 张大小为 256K 的缩略图,磁盘IO速度为 30 MB/s,磁盘每次寻道耗时 10 ms 性能优化模式 – 协议优化各种序列化协议时间和空间对比 代码调优 – 字符串 1JDK 1.6的substring方法存在内存泄露风险,JDK 1.7已修复 代码调优 – 字符串2 字符串分割:优先使用StringTokenizer而不是String类的split方法在性能敏感代码中优先使用String类的charAt和indexOf方法 比如用charAt代替startWith和endWith涉及大量字符串拼接优先使用StringBuffer和StringBuilder如果能预估字符串长度,最好提供容量参数 代码调优 – 数据结构1ArrayList和LinkedList的增加元素方法比较add(E
您可能关注的文档
最近下载
- 2022年浙江省公务员考试《申论》真题及参考答案.docx VIP
- 新疆交投集团招聘笔试真题2024.docx VIP
- 第5讲从垄断到金融垄断—当代资本主义的发展.ppt VIP
- GB50205-2020钢结构工程施工质量验收标准.docx VIP
- CPI-GEN-IV-速调管高功放教程.pdf VIP
- 最全100%必过地理信息安全保密培训证书题库(填空题).docx
- 2020最新-4S店配件价格-华晨宝马3系 F35(12-07--15-09).pdf VIP
- A Rose for Emily 原文.doc VIP
- 义务教育人教版信息科技三年级全一册教学设计教案.docx
- 2025年体育单招英语试卷 .pdf VIP
原创力文档


文档评论(0)