性能优化(三)
本周是跟随李智慧老师学习架构师训练营的第 9 周,现将本周主要内容总结如下:
一条 sql 执行过程:
客户端--->连接器--->分析器--->优化器--->执行器--->存储引擎
连接器:管理连接,权限认证
分析器:词法分析,语法分析
优化器:执行计划生成,索引选择
执行器:操作引擎,返回结果
存储引擎:存储数据,提供读写接口
prepareStatement:预处理,提前生成执行计划,效率高。预防 sql 注入。
字节码执行流程
自定义类加载器:
1.隔离加载类,同一个 JVM 中加载同一个类的不同版本
2.扩展加载源:从网络、数据库加载字节码
3.字节码加密:加载自定义的加密字节码,在 classLoader 中解密
被 volatile 修饰的共享变量(类的成员变量,类的静态成员变量)保证了不同线程对其进行修改时的可见性
可达性分析
垃圾回收算法:
清理:将可回收的对象标记为空闲,放入一个空闲列表
压缩:
复制:
java 启动参数:
标准参数:所有 jvm 均需实现,先后兼容。-server -client -D -cp -classpath -verbose
非标准参数:不保证所有 jvm 均实现,不保证向后兼容:-Xms -Xmn -Xmx -Xss
非 stable:各 jvm 实现可能不同,以后可能取消。-XX:useConcMarkSwapGC
JVM 性能诊断工具:
基本工具:jstack jmap jps jstat
集成工具:JConsole JVisualVM
启动线程数=【执行时间/(执行时间-IO 等待时间)】*CPU 核数
内存泄漏:
长生命周期对象
静态容器
缓存
创建对象的步骤:静态代码块-->静态字段-->父类构造器-->子类构造器
秒杀
请简述 JVM 垃圾回收原理。
设计一个秒杀系统,主要的挑战和问题有哪些?核心的架构方案或者思路有哪些?
一个秒杀系统的主要挑战和问题:大流量高并发,可能导致网络资源、服务器资源耗尽,从而导致服务崩溃。秒杀器可能给服务器造成更大的压力。
服务隔离:秒杀系统单独部署,不影响其他系统功能
页面静态化:将商品列表、详情等界面静态化,减少服务器压力。引入 CDN 服务器,静态页面缓存服务器
并发控制,预防秒杀器:随机 url,token,访问上限控制
限流、降级:非主要功能降级
服务器冗余设计:
轻量化服务器:选择合适的中间件及版本
评论