写点什么

架构师训练营 No.9 周总结

用户头像
连增申
关注
发布于: 2020 年 08 月 04 日

JVM 虚拟机原理

JVM内存结构:

  1. 虚拟机栈:主要存放了大量的线程相关信息。

  2. 方法区:主要存储了Java代码中的类加载的相关信息。

  3. 本地方法栈:存放了Java代码中调用的本地方法的信息

  4. 堆:存储了大量的Java对象信息,但凡是new出来的对象都存放在这里。-Xmx和-Xms来调节堆的大小。

  5. 程序计数器:用来存储指向下一条指令的地址,也即将要执行的指令代码。



JAVA字节码文件

字节码执行流程

字节码文件编译过程

JAVA运行环境



JVM垃圾回收

JVM GC回收方法

  1. 复制回收算法:扫描区域所有的可达对象,然后将其复制到另外一片区域保存起来,再将其现在正在使用的区域内存全部清空。效率低,需要的空间大,优点,不会产生碎片。

  2. 标记清除算法:首先遍历整个区域中的对象,然后标记所有的可达对象,再将所有内存中未被标记的对象全部清除。速度较快,占用空间少,标记清除后会产生大量的碎片。

  3. 标记整理法:遍历整个空间对可达对象进行标记,然后再讲所有可达对象整理到一起去,最后清除掉不可达的对象。简单但速度很慢。缺陷是:不能处理循环引用的情况。

JVM GC回收策略

  1. 强引用:默认情况下,对象采用的均为强引用(GC不会回收)。

  2. 软引用:软引用是Java中提供的一种比较适合于缓存场景的应用(在内存不够用时下才会被GC)。

  3. 弱引用:在GC时一定会被GC回收。

  4. 虚引用:在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

采用反向代理、加速核心页面

海量数据的通明垂直切分



用户头像

连增申

关注

还未添加个人签名 2020.04.02 加入

还未添加个人简介

评论 (1 条评论)

发布
用户头像
作业请添加”极客大学架构师训练营“标签,便于分类查找~
2020 年 08 月 05 日 14:11
回复
没有更多了
架构师训练营 No.9 周总结