第九周学习总结
本周学习了JVM和秒杀系统设计
JVM
类文件通过类加载器,将class文件解析存入运行期数据区,java虚拟机运行时包涵方法区和堆,类及静态变量会被加载到方法区,创建的对象会被加载到堆中。程序运行时,使用的是线程,每个线程都有自己的栈,栈里面存储的是局部变量。当线程执行到某一行代码时,这个信息是存储在程序技术寄存器中。
java字节码,java指令有200多个,一个字节存储256种不同指令,一个指令字节被称为字节码。jvm可以对字节码进行解析执行,也可以对热点代码编译执行。编译过程,java源文件进行词法分析,token流进行语法分析,再进行语义分析,最后生成字节码。
类记载器,双亲委托模式。
线程有自己的工作内存,当共享变量被volatile修饰后,变量被某个线程修改时对所有线程都是立即可见的。
java运行环境,通过编译器编译成java字节码,类记载器对字节码进行验证,然后进行解析执行或编译执行。
JVM垃圾回收。回收方式,清理、压缩、复制。新生代,老年代。垃圾回收算法,串行、并行、并发和G1。
java启动参数有标准参数和非标准参数,非stable参数。
常用JVM性能诊断工具,JPS、JSTAT、JMAP、JSTACK。集成工具,JConsole,JVisualVM
java线程安全。局部的变量和对象是安全的,而成员变量是非安全的。
ThreadLocal创建自己线程的map,使线程所用资源私有化。
java内存泄露。内存泄露是开发人员错误引起的。对象的不合理创建和使用会造成内存泄露。
秒杀
秒杀的主要面临问题:短时间内对系统造成的高并发,传统页面的访问,会造成应用接受请求的极大压力和数据库读取的极度过载压力。
核心解决思路:去除数据库读取,商品页面静态化,精简页面,减少对应用的请求压力。
评论