JAVA性能调优 - 概述

性能低的几个直观表现(4个)
  • 执行速度慢
  • 内存消耗过多,甚至溢出
  • 启动时间太长
  • 负载承受差,当系统压力上升的时候,系统的执行速度、响应时间急速下降
评价性能高低的指标(6个)
  • 代码执行时间、CPU占用时间、内存分配、磁盘吞吐量、网络吞吐量、响应时间
解决性能的2个思想
  • 木桶原理:我们首先要解决的是系统性能最差的,就比如木桶一样,最低的一块木板,才是决定木桶装多少水
  • Amdahl定律:充分利用CPU的数量,尽量将串行的程序改为并行程序
最可能影响系统瓶颈的几个地方
  • 磁盘的I/O读写、网络数据的读取、大量的CPU的计算、异常的捕获和处理、海量的数据库的读写、不必要的锁竞争、内存太小
几种软件优化的方法
  • 设计调优:好的设计是性能的关键,能带来程序“质”的优化,这个是架构师要考虑的,主要体现在“设计模式”、“组件的性能”
  • 代码调优:需要开发人员熟悉“API”或者“类库”背后的算法数据结构
  • JVM调优:软件开发完成后进行,比如设置JVM的堆大小、垃圾回收策略等
  • 数据库调优:SQl语句优化、适合的数据库、数据库软件优化
  • 操作系调优:Linux比Windows大多情况下就快不少,然后可以为程序设置内存、信号、磁盘等
优化的一些例子
  • 监控的方式改为回调
  • 了解LinkedList和ArrayList背后的原理,合理的场合下使用他们
  • SQl查询时,PreparedStatement替代Statement方式
  • 避免使用 * 号,作查询、合理的使用冗余字段、建立合理的索引,提高查询效率
  • 使用Linux操作系统替代window操作系统
几种设计模式的优化方式
  • 单例模式:将创建耗时的类,缓存到内存中,节约内存且提高访问速度
  • 代理模式:延迟加载数据、缓存已加载的数据
  • 享元模式:同一个对象肯定会被多次访问,且生成非常耗时,就可以在第一次访问时,缓存内容
  • 装饰模式:通过功能增强,可以为写内容时,增加缓冲
  • 观察者模式:当需要监控某个对象是否改变时,用“被提醒”的方式替代轮训主动检测对象是否改变
几种常用的优化组件和方法
  • 缓冲:一般用于写入数据,CPU运行较快,开通缓冲区可以缓解应用程序上下层之间的性能差异
  • 缓存:一般用于读取数据,将需要频繁使用且读取消耗较大的数据放入内存中,则为缓存
  • 对象池:将“生成”或者“销毁”开销较大的对象存入一个“池”中,当需要的时候就提取,不需要的时候就放回,常用的有线程池数据库连接池
  • 并行替代串行:CPU并行能力大,可以使用线程池或者并发数据结构替代串行代码
  • 负载均衡:使用集群 + Session共享的方式,减轻单个服务器的压力
  • 时间换空间:当内存不足,而CPU有富余的情况,可以考虑时间换空间,一般用在嵌入式设备
  • 空间换时间:当内存充足,而CPU运算能力较弱时,可以是使用大量能力的算法,加快运算时间
优化小技巧

一下技巧均是在jdk 1.8下面测试的,各个版本有可能不同,为了提高技术,大家还是要多练习LeetCode啊……

  • 局部变量,并静态变量、实例变量效率更,因为局部变量保存在中,而其他变量保存在
  • 位运算计算速度远远高于一般的乘除法
  • 位运算虽然快,但是条件判断时,布尔运算速度远远高于位运算
  • 数组拷贝方法使用 System.arraycopy() 比for语句更高效
  • 如果创建类耗时,Object.clone() 同样高效,如果需要深拷贝,可以重写clone方法
  • 静态方法不一定比实列方法
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值