架构师训练营第九周学习总结
JVM组成结构
Java字节码文件
Java如何实现在不同操作系统、不同硬件平台上,都可以不用修改代码顺畅地执行?
计算机领域的任何问题都可以通过增加一个中间层(虚拟层)来解决。比如:
面向接口编程
7层网络协议
JVM
编程框架
一致性hash算法的虚拟节点
字节码执行流程
双亲委派机制
低层次的当前类加载器,不能覆盖更高层次类加载器已经加载的类。如果低层次类加载器想加载一个未知类,需要上级类加载器确认,只有上级类加载器没有加载过这个类,也允许加载的时候,才让当前类加载器加载这个未知类。
自定义类加载器
隔离加载类:同一个JVM中不同组件加载同一个类的不同版本。
扩展加载源:从网络、数据库等加载字节码。
字节码加密:加载自定义的加密字节码,在Classloader中解密。
JVM垃圾回收
JVM垃圾回收就是将JVM堆中的已经不再被使用的对象清理掉,释放宝贵的内存资源。JVM通过一种可达性分析算法进行垃圾对象的识别。
JVM垃圾回收器算法
Java启动参数
标准参数,所有的JVM实现都必须实现这些参数的功能,而且向后兼容:
运行模式-server,-client
类加载路径-cp,-classpath
运行调试-verbose
系统变量-D
非标准参数,默认JVM实现这些参数,但不保证所有的jvm都实现,而且不保证向后兼容
-Xms初始堆大小
-Xmx最大堆大小
-Xmn新生代大小
-Xss线程堆栈大小
非Stable参数,此类参数各个jvm实现会有所不同,将来可能会随时取消
-XX:+UseConcMarkSweepGC 启用CMS
Java内存泄漏
Java内存泄漏是由于开发人员的错误引起的。如果程序保留堆永远不再使用的对象的引用,这些对象将会占用并耗尽内存。
长生命周期对象
静态容器
缓存
典型描述系统的组成
秒杀系统设计原则
静态化
采用JS自动更新技术将动态页面转化为静态页面(再做一个商品录入系统,负责自动更新静态页面)
并发控制,防秒杀器
设置阀门,只放最前面那一部分人进入描述系统
简化流程
砍掉不重要的分支流程,如下单页面的所有数据库查询
以下单成功作为秒杀成功标志。支付流程只要在一天内完成即可
前端优化
采用YSLOW原则提升页面响应速度
秒杀系统静态化
list和detail都是静态页面
商品列表页面和商品详情页面,如何判断秒杀已经开始呢?
答案:valid-offer.js:var valid_offerIds = [1111,2222,3333]
互联网搜索引擎架构
爬虫系统架构
Lucence架构
评论