沉梦听雨的编程指南 沉梦听雨的编程指南
首页
  • 基础篇
  • 集合篇
  • 并发篇
  • JVM
  • 新特性
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 基础篇
  • MySql
  • Redis
  • 达梦数据库
  • Spring
  • SpringBoot
  • Mybatis
  • Shiro
  • 设计须知
  • UML画图
  • 权限校验
  • 设计模式
  • API网关
  • RPC
  • 消息队列
  • SpringCloud
  • 分布式事务
  • 云存储
  • 搜索引擎
  • 多媒体框架
  • 虚拟机
  • 开发工具篇
  • 工具库篇
  • 开发技巧篇
  • 工具类系列
  • 随笔
  • 前端环境搭建
  • HTML与CSS
  • JS学习
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • 脚手架搭建
  • 瑞吉外卖
  • 黑马点评
  • vue-blog
  • 沉梦接口开放平台
  • 用户中心
  • 聚合搜索平台
  • 仿12306项目
  • 壁纸小程序项目
  • RuoYi-Vue
  • 博客搭建
  • 网站收藏箱
  • 断墨寻径摘录
  • 费曼学习法
Github (opens new window)

沉梦听雨

时间是最好的浸渍剂,而沉淀是最好的提纯器🚀
首页
  • 基础篇
  • 集合篇
  • 并发篇
  • JVM
  • 新特性
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 基础篇
  • MySql
  • Redis
  • 达梦数据库
  • Spring
  • SpringBoot
  • Mybatis
  • Shiro
  • 设计须知
  • UML画图
  • 权限校验
  • 设计模式
  • API网关
  • RPC
  • 消息队列
  • SpringCloud
  • 分布式事务
  • 云存储
  • 搜索引擎
  • 多媒体框架
  • 虚拟机
  • 开发工具篇
  • 工具库篇
  • 开发技巧篇
  • 工具类系列
  • 随笔
  • 前端环境搭建
  • HTML与CSS
  • JS学习
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • 脚手架搭建
  • 瑞吉外卖
  • 黑马点评
  • vue-blog
  • 沉梦接口开放平台
  • 用户中心
  • 聚合搜索平台
  • 仿12306项目
  • 壁纸小程序项目
  • RuoYi-Vue
  • 博客搭建
  • 网站收藏箱
  • 断墨寻径摘录
  • 费曼学习法
Github (opens new window)
  • Spring

  • SpringBoot

    • SpringBoot核心知识总结
    • 配置文件详解
    • SpringBoot3知识汇总
      • AOT 与 JIT 的介绍
        • 含义说明
        • AOT 的优点
        • 什么是云原生?
        • AOT 的缺点
      • JIT 在高并发场景中的生产问题
        • 生产问题现象
        • 解决办法
      • SpringBoot3-GraalVM 代替 JDK 实现 AOT
    • SpringBoot参数校验注解解析
    • SpringBoot读取Resource下文件的几种方式
    • SpringBoot应用的管理与监控
  • Mybatis

  • Shiro

  • 常用框架
  • SpringBoot
沉梦听雨
2023-11-25
目录

SpringBoot3知识汇总

# SpringBoot3知识汇总

# AOT 与 JIT 的介绍

# 含义说明

  • JIT(Just-in-Time,实时编译)-- Java 跨平台的基础

  • AOT(Ahead-of-Time,预编译或提前编译)-- 无法跨平台

# AOT 的优点

  1. 启动和运行速度快
  2. 打包体积小

主要是为了朝云原生方向发展

# 什么是云原生?

云原生,为云而生。

云原生(Cloud Native)是一种构建和运行应用程序的方法,旨在充分利用云计算环境的优势。它强调通过容器化应用程序组件、微服务架构、动态编排和自动化管理来实现敏捷性、可伸缩性、弹性和高可用性。

关键的云原生特征包括:

  1. 容器化: 将应用程序和其所有依赖项封装到容器中,确保在不同环境中的一致性运行。
  2. 微服务架构: 将应用程序划分为小型、独立、可独立开发和部署的服务,提高灵活性和可维护性。
  3. 动态编排: 使用容器编排工具(例如 Kubernetes)自动化容器的部署、伸缩、负载均衡和故障恢复。
  4. 持续交付: 强调自动化的构建、测试和部署流程,以实现更频繁和可靠的交付。
  5. 敏捷性: 采用敏捷开发和敏捷运维原则,鼓励快速迭代和持续改进。
  6. 弹性和可伸缩性: 可以动态地适应负载变化,实现弹性和可伸缩的应用程序架构。
  7. 服务发现和治理: 提供服务发现和治理机制,确保微服务之间的通信和协同。
  8. 日志和监控: 强调在整个应用程序生命周期中的日志记录和监控,以便实时了解应用程序的状态和性能。
  9. 多租户和云原生安全: 考虑在云环境中的多租户需求,并强调云原生安全的实践。

这些原则和实践使得云原生应用程序更容易部署、扩展和管理,并能更好地利用云计算平台的优势。Kubernetes 是当前广泛使用的云原生技术之一,用于容器编排和管理。

# AOT 的缺点

  1. 编译后的程序不支持跨平台
  2. 不支持动态功能,如 AOP
    • 因为是预编译的,所以就没有了 AOP 这种面向切面编程的功能。

# JIT 在高并发场景中的生产问题

# 生产问题现象

前提

要超过一定的并发量。

现象

热点应用重启后,出现业务超时,几分钟后恢复正常。

解析

重启后大量请求进来,导致多个类同时触发 JIT 超时,导致机器 CPU 升高,性能下降。

执行方式

image

  • JVM 混合执行模式初期以解释方式执行,执行效率慢;
  • 当【执行次数 / 频率】达到指定阀值后,促发 JIT 编译后;编译后,以机器指令码方式执行,执行效率提高。

细节分析

  1. 启动初期:应用以解释执行,执行效率较慢,CPU 有所上升
  2. 触发 JIT 编译:CPU&load 飙高,使请求堆积线程池满,出现请求处理超时的情况
  3. JIT 编译后:CPU 降低,请求处理较之前快,服务逐步恢复。

# 解决办法

  1. 预热:初始让程序自动运行热点代码几百次
  2. 流量控制:启动时小流量,运行几分钟后再放到正常流量

# SpringBoot3-GraalVM 代替 JDK 实现 AOT

什么是 GraalVM ?

GraalVM 是一个跨语言的通用虚拟机,不仅支持了 Java、Scala、Groovy、 Kotlin 等基于 JVM 的语言,以及 C、C++ 等基于 LLVM 的语言,还支持其它像 JavaScript、Ruby、Rust、Python 和 R 语言等。

参考文章

使用GraalVM 构建 Spring Boot 3.0 原生可执行文件-腾讯云开发者社区-腾讯云 (tencent.com) (opens new window)

上次更新: 2024/9/25 11:16:13
配置文件详解
SpringBoot参数校验注解解析

← 配置文件详解 SpringBoot参数校验注解解析→

Theme by Vdoing | Copyright © 2023-2025 沉梦听雨 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式