写点什么

总结

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

1.jvm 组成架构

Java 是一种跨平台语言,jvm 屏蔽;额底层系统的不同,为 java 字节码文件构造了一个统一的运行环境。

2.java 字节码文件

java 如何实现在不同操作系统、不同硬件平台上,都可以不用修改代码就能顺畅地执行。计算机领域的任何问题都可以通过增加个中间层来解决。

字节码执行流程:

java 字节码文件编译过程

3.堆 &栈

堆:每个 jvm 实例唯一对应一个堆。应用程序在运行中所创建的所有类是咧或者数组都放在这个堆中,并由应用所有的线程共享。

堆栈:jvm 为每个新创建的线程都分配一个堆栈,也就是说,对于一个 java 程序来说,他的运行就是通过堆栈的操作来完成的。

java 中所有对象的存储空间都是在堆中分配的,但是这个对象的引用却在堆栈中分配,也就是说在建立一个对象时从两个地方都分配内存,在堆中分配的内存实际建立这个对象,而在堆栈中分配的内存只是一个指向这个堆对象的引用而已。

4.方法区 &程序计数器

方法区主要存放从磁盘加载进来的类字节码,而程序运行过程中创建的类实例则存放堆里,程序运行的时候,实际上是以线程为单位运行的,当 jvm 进入启动类的 main 方法时候,就会为应用程序创建一个主线程,main 方法里的代码就会被这个主线程执行,每个线程都有自己的 java 栈,栈里存放着方法运行期的局部变量,而当前线程执行到哪一行字节码指令,这个信息则被存放在程序技数寄存器。

java 栈:

所有在方法内定义的基本类型变量,都会被每个运行这个方法的线程放入到自己的栈中,线程的栈彼此隔离,所以这些变量一定是线程安全的。

5.JVM 的垃圾回收

VM 通过一种可达性分析算法进行垃圾对象的识别,具体过程是:从线程栈帧中的局部变量,或者是方法区的静态变量出发,将这些变量引用的对象进行标记,然后看这些被标记的对象是否引用了其他对象,继续进行标记,所有被标记过的对象都是被使用的对象,而那些没有被标记的对象就是可回收的垃圾对象了。

回收的方法主要有三种:

清理:将垃圾对象占据的内存清理掉,其实 JVM 并不会真的将这些垃圾内存进行清理,而是将这些垃圾对象占用的内存空间标记为空闲,记录在一个空闲列表里,当应用程序需要创建新对象的时候,就从空闲列表中找一段内存分配给新对象。

压缩:从退空间的头部开始,将存货的对象拷贝放在一段连续的内存空间中,那么其余的空间就是连续的空闲空间。

复制:将堆空间分为两部分,只在其中一部分创建对象,当这部分空间用完的时候,将标记过的可用对象赋值到另一个空间中。

6.java 代码优化

合理并谨慎使用多线程

启动线程数 = [任务执行时间/(任务执行时间-IO 等待时间)] * CPU 核数

最佳启动线程数和 cpu 内核数量成正比,和 IO 阻塞时间成反比。


7.秒杀系统

秒杀系统组成

三个页面组成:秒杀商品列表,秒杀商品介绍,下单。

设计原则

静态化:

采用 js 自动更新技术将动态页面转化为静态页面

并发控制,防秒杀器:

设置阀门,只放最前面的一部分进入秒杀系统

简化流程:

砍掉不重要的分支流程。

以下单成功作为秒杀成功标志

前端优化:

采用 YSLOW 原则提升页面响应速度


用户头像

chenzt

关注

还未添加个人签名 2018.05.15 加入

还未添加个人简介

评论 (1 条评论)

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