第十二章:执行引擎
执行引擎执行引擎的作用及工作过程概述执行引擎概述
执行引擎的工作过程
Java代码编译和执行的过程
机器码、指令、汇编语言机器码
指令
汇编语言
高级语言
总结
字节码
解释器
解释器的工作机制(工作任务)
解释器分类
现状
JIT编译器Java代码的执行分类
为什么需要解释器和编译器并存
HotSpot JVM的执行方式
案例
JIT编译器概述
啥时候选择JIT(热点代码及探测方式)
方法调用计数器
回边计数器
HotSpot VM设置模式
HotSpot VM中JIT分类
最近的发展(了解即可)Graal编译器
AOT
二、新版本JDK和SpringBoot特性介绍
新版本JDK和SpringBoot特性本项目采用JDK17和SpringBoot3,在进行项目开发之前,先要了解JDK9-JDK17的新特性和SpringBoot3的新特性
JDK9新特性jshell交互式工具JDK9中引入了命令行交互工具jshell,直接可以运行对应Java代码
模块化开发JDK8及以前将package作为顶级组件,JDK9将模块作为顶级组件
不同模块之间的相互引用问题,可以通过Maven加入依赖的方式引用
在JDK9之后,可以通过模块化方式引用
使用module-info.java来申明一个模块,一个模块只能有一个该文件,且该文件在顶层包同目录
使用exports来申明可以被外部引用的包,可以有多个exports语句
一个module中能够被外部调用的包都需要在module-info.java中用exports语句申明
exports 包名
使用requires来申明依赖的外部模块,可以有多个requires语句
一个module中需要调用外部模块都需要在module-info.java中用requires语句申明
requires 模块名
...
第九章:方法区
方法区栈、堆、方法区的交互关系运行时数据区结构图从线程共享与否的角度来看
栈、堆、方法区的交互关系
方法区的理解官方文档
定义太多类会导致方法区溢出
加载大量第三方的jar包
Tomcat部署工程项目过多
大量动态生成反射类
HotSpot中方法区的演进
设置方法区的大小和OOM设置方法区大小
如何解决OOM
方法区的内部结构概览
随着JDK版本的更新,方法区内存结构可能会发生变化,上图只代表经典版本
内部组成信息类型信息
域(Field)信息类的成员变量
方法(Method)信息
运行时常量池
为什么需要常量池
常量池中的信息
常量池总结
运行时常量池
查看.class文件,可以反应方法区结构javap -v -p xxx.class
补充non-final的类变量
final类变量
方法区使用举例方法区的演进细节
Q:为什么永久代要被元空间替换?
Q:字符串常量池(StringTable)为什么要调整?
Q:静态变量的存放位置?JDK7及其以后的版本的HotSPot虚拟机选择把静态变量与类型在Java语言一端的映射Class对象存放在一起,存储在Ja ...
第十一章:直接内存
直接内存
12345678910111213141516public class Test { public static int capacity = 1024*1024*1024; public static Scanner scanner = new Scanner(System.in); public static void main(String[] args) { //分配1G内存 System.out.println("直接分配内存完毕"); ByteBuffer buffer = ByteBuffer.allocateDirect(capacity); scanner.next(); //释放内存 buffer=null; System.gc(); System.out.println("释放内存完毕"); scanner.next(); }} ...
第十章:对象的实例化、内存布局与访问定位
对象的实例化、内存布局与访问定位对象的实例化相关面试题
对象创建的方式
对象创建的步骤
init方法包含了对象属性的显示赋值、代码块赋值和构造器赋值
对象的内存布局
内存布局示例
对象的访问定位Q:JVM是如何通过栈帧中的对象引用访问到其内部的对象实例的呢?
一、项目背景和概述
项目概述高并发秒杀场景中常见的问题
秒杀还没开始,页面就崩了
秒杀刚开始,服务器就崩了
秒杀结束后,库存崩了(比如商品超卖问题)
秒杀过程没有问题,但服务器响应很慢
项目架构采用前后端分离架构,前端采用vue,后端采用SpringBoot
千万级流量的大型分布式系统架构设计
高并发、高性能、高可用场景的解决方案
项目进度安排
架构搭建,使用前后端分离架构
如何利用SpringBoot和VUE-CLI快速搭建前后端分离项目
业务功能开发,实现基本的选座排队购票功能
引入高并发技术,实现高性能抢票
设计到的主要框架及其版本
JDK17
SpringBoot 3.0.0
Spring 3.0.0版本只支持JDK 17及以上
SpringCloud Alibaba 2022.0.0.0
第三方依赖为适应JDK17,也会做相应版本升级
常用的高并发技术解决方案
12306系统架构生活中常见的高并发场景
商品秒杀,比如淘宝双11
微信支付宝等第三方支付平台
微博突发热点
用户操作日志
12306购票平台
12306系统的特点业务复杂度高动态库存车票途径多站,可能一张 ...
docker
Docker快速构建、运行、管理应用的工具
环境安装Linux环境安装
利用VMWare搭建CentOS7虚拟机
修改网络配置,使用固定IP地址
利用VMWare镜像和克隆,创建多个虚拟机
windows系统使用xshell工具进行远程连接虚拟机
windows系统使用WinScp工具与虚拟机进行文件传输
虚拟机搭建和网络配置修改参考之前所写的博客:Linux安装与网络配置
安装docker虚拟化容器技术。Docker基于镜像,可以秒级启动各种容器。每一种容器都是一个完整的运行 环境,容器之间互相隔离
官方文档—安装指南
卸载系统旧版本的docker12345678sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ ...
Mybatis-Plus
Mybatis-Plusmybatis-plus学习笔记,参考B站视频
参考博客
Mybatis-Plus官方文档
快速入门使用mybatis-plus的基础步骤
引入mybatisPlus的Maven依赖,代替原始Mybatis依赖
12345<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.3.1</version></dependency>
定义Mapper接口继承自BaseMapper
1234//继承BaseMapper接口,传入数据库对应实体类的泛型public interface UserMapper extends BaseMapper<User> {}
单元测试即可直接使用
mapper存在一系列增删改查的方法可以直接调用
小插曲
测试如下方法
12 ...
第七章:本地方法栈
本地方法栈本地方法栈概述
第六章:本地方法接口
本地方法接口什么是本地方法
为什么需要本地方法
代码举例
现状