架构师训练营 No.9 周总结
JVM 虚拟机原理
JVM内存结构:
虚拟机栈:主要存放了大量的线程相关信息。
方法区:主要存储了Java代码中的类加载的相关信息。
本地方法栈:存放了Java代码中调用的本地方法的信息
堆:存储了大量的Java对象信息,但凡是new出来的对象都存放在这里。-Xmx和-Xms来调节堆的大小。
程序计数器:用来存储指向下一条指令的地址,也即将要执行的指令代码。
JAVA字节码文件
字节码执行流程
字节码文件编译过程
JAVA运行环境
JVM垃圾回收
JVM GC回收方法
复制回收算法:扫描区域所有的可达对象,然后将其复制到另外一片区域保存起来,再将其现在正在使用的区域内存全部清空。效率低,需要的空间大,优点,不会产生碎片。
标记清除算法:首先遍历整个区域中的对象,然后标记所有的可达对象,再将所有内存中未被标记的对象全部清除。速度较快,占用空间少,标记清除后会产生大量的碎片。
标记整理法:遍历整个空间对可达对象进行标记,然后再讲所有可达对象整理到一起去,最后清除掉不可达的对象。简单但速度很慢。缺陷是:不能处理循环引用的情况。
JVM GC回收策略
强引用:默认情况下,对象采用的均为强引用(GC不会回收)。
软引用:软引用是Java中提供的一种比较适合于缓存场景的应用(在内存不够用时下才会被GC)。
弱引用:在GC时一定会被GC回收。
虚引用:在GC时一定会被GC回收。
JAVA启动参数
标准参数,所有JVM都必须实现的功能
• 运行模式 -server,-client
• 类加载路径 -cp,-classpath
• 运行调试 –verbose
• 系统变量 –D
非标准化参数,默认JVM实现参数,不保证向后兼容
• -Xms 初始堆大小
• -Xmx 最大堆大小
• -Xmn 新生代大小
• -Xss 线程堆栈大小
非Stable参数,各JVM有所不同,有可能取消
• -XX:-UseConcMarkSweepGC 启用CMS垃圾回收
JVM性能针对工具
基本工具:JPS,JSTAT,JMAP,JSTACK
集成工具:JConsole,JVisualVM
JAVA优化
合理并谨慎使用多线程
竞态条件与临界区
线程安全
JAVA内存泄露
秒杀
建设目的
图片网路带宽,高并发,防秒杀器,商品信息提前泄露,数据库压力,对现有系统压力。
架构方案
目标估算-带宽、并发量。
设计原则静态化(商品列表、详情页面静态化,秒杀前JS自动更新)
并发控制(设置阀门,只放最前面部分进入:秒杀页、下单页、支付);
简化流程-商品列表、商品详情、下单,砍掉不重要流程和所有数据库查询
前端优化:图片压缩、HTML、CSS、JS压缩精简,数据缓存
秒杀器预防、Web-Server调优(Apache、JBoss)、秒杀静态页面优化、下单页面优化、交易系统性能优化、二条页面优化、
应急预案
域名分离独立、失效降级服务,万能出错页面。
持续改进
采用更轻量/快速的服务器(Apache->Lighttpd、JBoss->Jetty、版本升级)
前端优化自动化
构建CDN
采用反向代理、加速核心页面
海量数据的通明垂直切分
评论 (1 条评论)