架构师训练营 - 学习总结 - 第九讲
JVM垃圾回收
1,判断可回收的对象:可达性算法,从根对象出发标记引用的对象,未标记的对象就是可回收的对象。
2,如何回收:清理、压缩、复制
3,回收时内存空间如何管理:分代回收
4,用什么样的过程进行回收:串行,并行,并发CMS,G1(现在都用这个)
JVM性能诊断工具
1,JPS
获取java进程pid和启动参数,进一步使用其他工具来监控和分析。
常用参数
-l 输出main class完整包
-q 显示pid
-m 输出传递给main方法的参数
-v 输出传递给JVM的参数
2,JSTAT
查看gc
jstat [Options] vmid [interval] [count]
Options -gcutil查看gc情况
vmid VM进程号
interval 间隔时间,毫秒
count 打印次数
举例:jstat -gcutil 94685 1000 10
3,JMAP
输出内存中所有对象
4,JSTACK
查看jvm内线程堆栈信息
5,JConsole,JVisualVM
可视化的集成工具
合理谨慎的使用多线程
启动线程数:[任务执行时间/(任务执行时间-IO等待时间)]*CPU内核数
ThreadLocal,既是共享也是独享,
创建一个静态成员变量
public staticThreadLocal myThreadLocal = new ThreadLocal();
通过把当前线程指针存入map实现每个线程获取自己的变量值
Java内存泄漏
由于开发人员的错误引起
程序保留对永远不再使用的内容的引用,这些对象将会占用并耗尽内存
长生命周期对象
静态容器
缓存
减少对象驻留内存的时间,用完之后设置为null可以加速回收
秒杀系统的设计
首页不访问数据库,首页做成静态。
并发控制,防秒杀器,只放最前面一部分人进入秒杀系统
简化流程,砍掉不重要的分支流程,以下单成功为秒杀成功标志,支付流程延后
前端优化
秒杀器预防
detail页面:url随机,描述前两秒放出,脚本生成,1000次访问上限控制
下单页面:订单ID随机,不能直接跳过detail页面进入,每个商品带预先生成的随机token作为URL参数,100次访问上限控制,如果秒杀过,直接跳到结束页面。
评论