写点什么

第九周总结

发布于: 2020 年 11 月 22 日
第九周总结

本周是性能优化的第三课,主要内容是数据库知识、JVM 知识以及 JAVA 编程优化技巧并且以如何设计一个秒杀为总结。

数据库知识

一条 SQL 语句执行过程是较为复杂的,客户端需要连接服务端、编译、优化、执行等步骤类似于 JVM 字节码的执行。简化版的执行过程如下:

预编译

  • 防止SQL 注入

  • 提升执行效率

索引

  • 聚簇索引

  • 非聚簇索引

事务

  • 原子性

  • 一致性

  • 隔离性

  • 持久性

JVM 知识

Java 是一种跨平台的语言,JVM 屏蔽底层系统的不同,为 JAVA 字节码文件构造了一个统一的运行环境。

在程序运行过程中,JVM 将字节码解释执行,屏蔽堆底层操作系统的依赖;JVM 也可以将字节码编译执行,当 JVM 判断其是热点代码,会通过 JIT 机制动态地将其编译为机器码,提高执行效率。

类加载器

JVM 的类加载是用来将应用的字节码文件加载到内存中执行,为了防止 class 的重复加载,采用双亲委托加载模型,从上至下为 Bootstrap Classloader、Extension Classloader、Application Classloader;当然用户可以通过继承 ClassLoader 类来自定义类加载器。

JVM 运行时区域

Java 应用启动后会作为一个进程运行,在 JVM 启动的过程可以通过参数 -Xms-Xmx 分别设置堆的最小和最大内存。通常来说,根据 JVM 内存区域的作用可以将其划分为:

  • Java 线程栈

  • 元数据区

  • 程序计数器

  • JNI 线程栈

  • 直接内存

JVM 垃圾回收

JVM 垃圾回收就是把 JVM 堆中已经不再被使用的对象清理掉,释放宝贵的内存资源。通常判断一个对象是否可以回收有引用计数法(淘汰)和可达性分析(GC Roots)两种。而对象回收算法有清理、压缩、复制。考虑到堆上对象的特征(朝生夕死)通常 GC 回收是执行分代回收机制,即YoungGC 和 FullGC。

JVM 垃圾收集器

  • serial GC

  • parallel GC

  • CMS GC

  • G1 GC

  • ZGC

JAVA 优化技巧

  • 合理使用多线程

  • 防止内存泄漏

  • 合理使用容器类

  • 缩短对象生命周期

  • IO Buffer & NIO

  • 组合代替继承

秒杀系统

秒杀是指有限的商品以一个集体的价格在一个确定的时间售卖。

主要挑战

  • 瞬间高并发

  • 秒杀器

核心架构方案?

基于系统的稳定性、秒杀活动的通用性和常态化,可以设计一套秒杀活动系统,其主要有秒杀商品列表、秒杀商品详情、下单支付三个页面组成。主要设计原则如下:

  • 静态化

  • 并发控制(基于计数器防止秒杀器)

  • 简化流程

  • 前端优化



发布于: 2020 年 11 月 22 日阅读数: 9
用户头像

人生就是一棵树 2018.08.11 加入

人生就是一棵树

评论

发布
暂无评论
第九周总结