计算机系统应用教程网站

网站首页 > 技术文章 正文

性能优化笔记 性能优化什么意思

btikc 2024-10-25 10:50:38 技术文章 6 ℃ 0 评论

性能优化

前端优化

浏览器/app

减少请求数

  • 合并CSS,JS,图片
  • 链接 keep-alive
  • 使用客户端缓存静态资源文件缓存在浏览器 Cache-Control和Expires
  • 启动压缩 gzip等文本文件压缩率80%左右,但是会给浏览器和服务器带来性能压力。需要权衡测试
  • 资源文件加载顺序 浏览器会下载完所有CSS数据后才能开始加载页面,因此CSS文件放在最前面,JS放在最后面
  • 减少Cookie传输:每一次响应都会在服务器和浏览器中间传输
  • 尽量给用户提示

CND加速

缓存静态资源,部署要求比较高可以考虑商用CDN

反向代理缓存

静态分离等手段

WEB组件分离

浏览器在同一个域名中有最大下载数量的限制。将不同类型的文件使用不同的域名来访问,这样可以有效的加快服务响应速度。

应用优化

缓存

缓存离用户越近越好。对于频繁修改的数据不要进行缓存,读写比例2:1以上,另外缓存的数据一般是热点数据,缓存存在部分时间不一致情况需要考虑。

使用缓存要考虑可用性问题。

  • 缓存预热
  • 缓存穿透布隆过滤器不存数据缓存
  • 分布式缓存与一致哈希

异步处理

同步和异步:关注结果消息的通知机制

阻塞和非阻塞:关注返回结果的状态

综合四种情况 同步阻塞、同步非阻塞、异步阻塞、异步非阻塞

bio、nio、aio

servlet异步(servlet3)

多线程开发

消息队列

集群化

程序

代码级别

  • 选择合适的数据结构
  • 选择更优的算法
  • 编写更少的代码

并发编程

利用CPU多核,尽量使用线程池。合理设置线程数量使用JDK提供的各种并发框架和工具

实现线程安全的类,避免造成线程不安全问题。

尽量减少锁的竞争(缩小锁的颗粒度,读写锁、cas等手段)

资源的复用

  • 单例模式
  • 池化技术(对比较昂贵的资源进行池化)

JVM

JIT(just in time)编译器线相关的优化

  • 热点编译的概念
  • 选择编译器类型 -server, -client -XX:+TieredCompilationclient模式热点编译开启的时间比较早server模式开启时间较晚(jdk1.7以后)TieredCompilation 分层编译,启动时按照client模式,一段时间后在按照server模式
  • 代码缓存相关 -XX:ReservedCodeCacheSize=N
  • 编译阈值方法调用计数器:方法调用了多少次循环回边计数器:循环完成的次数
  • 编译线程
  • 方法内联-XX:inline(设置是否开启内联默认开始)方法字节码小于325字节才会内联 参数 -XX:MaxFreqInlinesSize=N方法下雨35个字节码一定会内联
  • 逃逸分析

GC调优

GC时间小,次数少

  • 大多数java应用不需要GC调优
  • 大部分需要GC的不是参数问题是代码问题
  • GC调优是最后的手段

GC调优的原则

1、根据应用选择合适的GC回收器

2、设置合适的堆大小

3、选择年轻代比例

步骤:

1、监控GC的状态

2、分析结果判断是否需要优化(下面的情况就不需要调优)

minorGC时间 < 50ms ,10S 一次

FullGC执行在1S以下,10分钟以上执行一次

存储性能优化

  • 使用SSD硬盘
  • 定时清理数据或者按数据的性质分开存放
  • 结果集处理



本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表