JVM与Spring Boot解析

MATLAB - 机械臂手眼标定(眼在手内) - 估计安装在机器人上的移动相机的姿态 执行手眼校准有助于操作配备末端执行器(简称 “手”)的机械臂,该末端执行器依赖于摄像头提供的视觉数据。一旦完成了眼在手外的校准,机械臂就能准确地移动到摄像头识别的特定像素位置。这种能力是执行精确拾放任务(如分类、堆垛和分拣)的基础,即使在摄像机的确切位置和方向未知的情况下也是如此。机器人-摄像机系统有两种构型:眼在手内和眼在手外。在眼在手内构型中,摄像头直接安装在机器人手臂的末端执行器上。相反,在眼在手的构型中,摄像头固定在一个静止的物体上,机器人手臂在其视野内。 阅读详情

📕我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、(架构篇)、《解密程序员的思维密码——沟通、演讲、思考的实践》作者、清华大学出版社签约作家、Java领域优质创作者、优快云博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。

📘拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、SpringBoot、SpringMVC、SpringCloud、Mybatis、Dubbo、Zookeeper),消息中间件底层架构原理(RabbitMQ、RocketMQ、Kafka)、Redis缓存、MySQL关系型数据库、 ElasticSearch全文搜索、MongoDB非关系型数据库、Apache ShardingSphere分库分表读写分离、设计模式、领域驱动DDD、Kubernetes容器编排等。

📙不定期分享高并发、高可用、高性能、微服务、分布式、海量数据、性能调优、云原生、项目管理、产品思维、技术选型、架构设计、求职面试、副业思维、个人成长等内容。

Java程序员廖志伟

💡在这个美好的时刻,笔者不再啰嗦废话,现在毫不拖延地进入文章所要讨论的主题。接下来,我将为大家呈现正文内容。

优快云

JVM与Spring Boot深度解析

一、JVM知识体系概述

Java虚拟机(JVM)作为Java程序执行的载体,其内部机制复杂且强大。以下是对JVM知识体系的详细解析。

1. 类加载机制

类加载机制是JVM的核心功能,它确保了运行时类型的正确性。在Java程序中,每个类在运行前都必须被加载到JVM中。

  • 加载(Loading):加载过程包括定位类的字节码文件(.class文件)和将文件内容读入JVM中,同时创建一个Class对象。
  • 验证(Verification):验证类文件的字节码,确保它符合JVM规范,不含有违法操作。
  • 准备(Preparation):为类变量分配内存,并设置默认初始值。
  • 解析(Resolution):将类、接口、字段和方法的符号引用转换为直接引用。
  • 初始化(Initialization):执行类的初始化代码,如静态初始化器、静态代码块等。

2. 类加载过程

类加载过程可以分为以下阶段:

  • 启动:初始化系统类加载器(Bootstrap ClassLoader),负责加载JVM核心库。
  • 扩展:初始化扩展类加载器(Extension ClassLoader),负责加载JVM扩展库。
  • 应用程序:初始化应用程序类加载器(Application ClassLoader),负责加载应用程序的类库。

3. 双亲委派模型

双亲委派模型是Java类加载机制的核心,它要求子类加载器先委托父类加载器加载类,只有当父类加载器无法找到指定的类时,才由子类加载器尝试加载。

4. 自定义类加载器

自定义类加载器允许开发者加载特定类型的资源,如JAR文件、ZIP文件等。通过继承ClassLoader类并重写findClass方法,可以实现自定义类加载器。

5. 模块化系统(JPMS)

Java Platform Module System(JPMS)是Java 9引入的模块化系统,它将JVM和Java应用分割成多个模块,提高了性能和安全性。

6. 内存模型

JVM的内存模型包括:

  • 堆(Heap):存储所有实例对象和数组的内存区域。
  • 栈(Stack):存储局部变量和方法调用的内存区域。
  • 方法区(Method Area):存储类信息、常量、静态变量等的内存区域。
  • PC寄存器:存储当前线程所执行的指令地址的寄存器。

7. 内存溢出场景分析

内存溢出是指JVM的内存空间耗尽,导致程序无法正常运行。常见的内存溢出场景包括:

  • 堆内存溢出:创建大量对象导致堆内存不足。
  • 栈内存溢出:递归调用或方法调用栈过深导致栈内存不足。
  • 方法区溢出:类信息过多或类信息过大导致方法区不足。

8. 直接内存管理

直接内存是指JVM堆外内存,用于存储大对象或需要频繁读取的数据。直接内存管理可以通过ByteBuffer类实现。

9. 垃圾回收

垃圾回收是JVM自动回收不再使用的对象所占用的内存空间。垃圾回收过程主要包括以下几个步骤:

  • GC Roots可达性分析:从GC Roots开始,向上遍历可达对象,确定哪些对象是可达的。
  • 分代收集理论:将对象分为新生代(Young)、老年代(Old)和永久代(Perm),分别采用不同的回收策略。
  • 引用类型:包括强引用、软引用、弱引用和虚引用,不同引用类型在垃圾回收时的处理方式不同。

10. 垃圾回收算法

常见的垃圾回收算法包括:

  • 标记-清除(Mark-Sweep):先标记可达对象,然后清除未被标记的对象。
  • 复制(Copying):将对象分为两个区域,每次只使用一个区域,当该区域满时,将存活对象复制到另一个区域。
  • 整理(Compacting):将存活对象整理到内存的一端,释放空间。

11. 并发收集器

并发收集器允许在应用程序运行时进行垃圾回收,以减少停顿时间。常见的并发收集器包括:

  • CMS(Concurrent Mark Sweep):一种以降低停顿时间为目标的并发收集器。
  • G1(Garbage-First):一种以降低停顿时间为目标的并发收集器,适用于大内存场景。
  • ZGC(Z Garbage Collector):一种以降低停顿时间为目标的并发收集器,适用于多核大内存场景。

12. 停顿时间控制策略

JVM提供了多种停顿时间控制策略,如:

  • 自适应调整策略:根据程序运行情况动态调整GC参数。
  • 并行GC:在多个CPU核心上并行执行GC任务。

13. 性能调优

性能调优是提高JVM性能的关键。主要方法包括:

  • JVM参数配置:通过调整JVM参数,如堆大小、垃圾回收器等,优化性能。
  • 内存泄漏诊断:通过分析堆转储文件,找出内存泄漏原因。

14. JIT编译优化

JIT编译器可以将Java字节码编译成本地机器码,提高程序执行效率。JIT编译优化包括:

  • 即时编译(JIT):将Java字节码编译成本地机器码。
  • 动态优化:根据程序运行情况动态优化代码。

二、Spring Boot知识体系概述

Spring Boot作为Spring框架的一个子项目,它简化了Spring应用的创建和配置。

1. 自动配置

Spring Boot的自动配置功能可以根据项目的依赖关系自动配置Spring框架的Bean。

  • @EnableAutoConfiguration:通过扫描类路径下的配置类,自动配置相应的Bean。
  • 条件化配置(@Conditional):根据特定条件,有选择地配置Bean。

2. 自定义Starter

自定义Starter可以简化项目的依赖管理,提高开发效率。

  • 创建Maven项目:使用Spring Initializr创建Maven项目。
  • 添加依赖:添加Spring Boot Starter依赖。
  • 编写自动配置类:根据项目需求编写自动配置类。

3. 起步依赖

起步依赖是Spring Boot的核心概念之一,它将常用的依赖组合在一起,方便开发者快速启动项目。

  • Spring Boot Starter Web:提供Web应用功能。
  • Spring Boot Starter Data JPA:提供数据访问功能。
  • Spring Boot Starter Test:提供单元测试和集成测试功能。

4. 依赖管理机制

Spring Boot使用Maven或Gradle作为构建工具,通过pom.xml或build.gradle文件管理项目依赖。

  • BOM文件:BOM(Bill of Materials)文件定义了项目的依赖关系,有助于解决版本冲突。
  • 版本冲突解决:通过依赖传递和依赖排除,解决版本冲突问题。

5. 第三方库集成

Spring Boot支持与第三方库集成,如MyBatis、Hibernate等。

  • 添加依赖:将第三方库添加到项目依赖中。
  • 配置相关Bean:配置相关Bean,如数据源、事务管理等。

6. Actuator

Spring Boot Actuator提供了一系列端点,用于监控和管理Spring Boot应用。

  • 健康检查端点:检查应用的健康状态。
  • 度量指标收集:收集应用运行时的度量指标。

7. 自定义Endpoint

Spring Boot允许自定义Endpoint,以满足特定需求。

  • 实现Endpoint接口:实现Endpoint接口,定义端点逻辑。
  • 配置端点:配置端点信息,如端点ID、访问权限等。

8. 配置文件管理

Spring Boot使用配置文件管理应用配置,支持多种配置文件格式,如application.properties和application.yml。

  • 多环境配置:通过application-{profile}.yml文件,为不同环境配置不同的配置信息。
  • 配置加载优先级:根据配置文件路径和名称,确定配置加载的优先级。
  • 动态配置刷新:支持动态刷新配置信息。

9. 监控与日志

Spring Boot提供监控和日志功能,帮助开发者了解应用运行状态。

  • Micrometer集成:集成Micrometer,支持多种度量指标收集。
  • Logback/SLF4J配置:配置Logback或SLF4J,实现日志管理。

10. 分布式链路追踪

Spring Boot支持分布式链路追踪,如Zipkin和Jaeger。

  • Zipkin:一个开源的分布式追踪系统,可以帮助开发者追踪分布式系统中的请求。
  • Jaeger:一个开源的分布式追踪系统,提供更丰富的功能和更好的性能。

11. 扩展机制

Spring Boot提供扩展机制,允许开发者自定义AutoConfigurationBean、Bean生命周期扩展点等。

  • 自定义AutoConfigurationBean:自定义AutoConfigurationBean,实现特定功能。
  • Bean生命周期扩展点:扩展Bean的生命周期,如初始化、销毁等。

12. 响应式编程支持

Spring Boot支持响应式编程,如Spring WebFlux。

  • Spring WebFlux:一个基于Reactor项目的响应式Web框架,可以构建高并发的异步应用程序。

总结

本文详细介绍了JVM和Spring Boot的核心知识,包括JVM知识体系、类加载机制、内存模型、垃圾回收、Spring Boot知识体系、自动配置、第三方库集成、监控与日志、分布式链路追踪、扩展机制和响应式编程支持。通过学习本文,读者可以深入了解JVM和Spring Boot,提高开发效率,优化应用性能。

优快云

博主分享

📥博主的人生感悟和目标

Java程序员廖志伟

📙经过多年在优快云创作上千篇文章的经验积累,我已经拥有了不错的写作技巧。同时,我还与清华大学出版社签下了四本书籍的合约,并将陆续出版。

面试备战资料

八股文备战
场景描述链接
时间充裕(25万字)Java知识点大全(高频面试题)Java知识点大全
时间紧急(15万字)Java高级开发高频面试题Java高级开发高频面试题

理论知识专题(图文并茂,字数过万)

技术栈链接
RocketMQRocketMQ详解
KafkaKafka详解
RabbitMQRabbitMQ详解
MongoDBMongoDB详解
ElasticSearchElasticSearch详解
ZookeeperZookeeper详解
RedisRedis详解
MySQLMySQL详解
JVMJVM详解

集群部署(图文并茂,字数过万)

技术栈部署架构链接
MySQL使用Docker-Compose部署MySQL一主二从半同步复制高可用MHA集群Docker-Compose部署教程
Redis三主三从集群(三种方式部署/18个节点的Redis Cluster模式)三种部署方式教程
RocketMQDLedger高可用集群(9节点)部署指南
Nacos+Nginx集群+负载均衡(9节点)Docker部署方案
Kubernetes容器编排安装最全安装教程

开源项目分享

项目名称链接地址
高并发红包雨项目https://gitee.com/java_wxid/red-packet-rain
微服务技术集成demo项目https://gitee.com/java_wxid/java_wxid

管理经验

【公司管理与研发流程优化】针对研发流程、需求管理、沟通协作、文档建设、绩效考核等问题的综合解决方案:https://download.youkuaiyun.com/download/java_wxid/91148718

希望各位读者朋友能够多多支持!

现在时代变了,信息爆炸,酒香也怕巷子深,博主真的需要大家的帮助才能在这片海洋中继续发光发热,所以,赶紧动动你的小手,点波关注❤️,点波赞👍,点波收藏⭐,甚至点波评论✍️,都是对博主最好的支持和鼓励!

🔔如果您需要转载或者搬运这篇文章的话,非常欢迎您私信我哦~

YOLO26训练教程,训练自己的数据集教学,从源码下载,配置虚拟环境,准备数据集、训练、验证、推理测试 。实现0到1的完整教学过程。快速入门必看 本文详细介绍了YOLO26目标检测模型的配置与使用流程:1)下载YOLOv11源码并创建Python3.10虚拟环境;2)安装PyTorch2.5.1及相关依赖库;3)准备数据集并修改配置文件;4)编写训练脚本设置参数(640x640分辨率、500轮次);5)验证模型效果;6)使用训练好的模型进行推理测试;7)生成可视化热力图。整个过程涵盖了从环境搭建到模型应用的全流程,并提供了清华镜像源加速下载。 阅读详情

相关推荐

使用HFSS仿真分支波导耦合器

本文介绍了分支波导耦合器的HFSS仿真设计过程。首先给出了器件关键参数(t=0.365mm,l=1.600mm等),详细说明了建模步骤:包括创建中心分支、设置变量参数、镜像复制两侧分支、矩形波导端口设计等操作。重点阐述了激励端口设置方法,包括四个端口的积分线绘制,以及求解频率设定。最后展示了S参数、幅度平衡度和相位差等关键性能指标的仿真结果提取方法。整个设计过程体现了HFSS在微波器件仿真中的参数化建模和结果分析能力。

shao666888的博客 179

JVM核心机制解析

自定义类加载器允许开发者控制类的加载过程,这在实现模块化、插件式架构时非常有用。继承抽象类:通过继承类并重写方法,可以实现自定义的类加载逻辑。使用方法:通过方法可以直接从字节码数组创建Class对象,而不依赖于类加载器。自定义Starter可以帮助开发者将库或框架集成到Spring Boot项目中。创建自定义Starter:通过创建一个包含依赖的Maven项目,并添加相应的依赖和自动配置。提供配置元数据:在文件中声明自动配置类。

我是Java程序员廖志伟,感谢朋友们的支持!不定期贡献一篇高品质、过万文字、图文并茂且附有视频解说、满载代码示例注释的良心之作,坚决杜绝粗制乱造。 364

用Java实现森林冰火人游戏

g.drawString("游戏结束", CELL_SIZE * COLS / 2 - 100, CELL_SIZE * ROWS / 2);g.drawString("难度级别: " + difficultyLevel, 10, CELL_SIZE * ROWS + 60);g.drawString("生命值: " + playerHealth, 10, CELL_SIZE * ROWS + 20);setTitle("森林冰火人");

2401_82778412的博客 1734

深入解析JVM核心机制

JVM 通过类加载、内存管理、执行引擎和 GC 的协同实现 "Write Once, Run Anywhere"。理解其机制对性能优化、内存泄漏排查至关重要。实际开发中需结合业务场景选择 GC 策略(如低延迟选 ZGC,高吞吐选 Parallel GC)。

人数苦短,我学Java 841

记一次网络风暴/网络环路

环境: win10 x64 ,联想云教室,电子教室,华三交换机。 状况描述: 最开始开机,一直卡在PXE启动界面,进不去系统。电脑技术张工说,先开教师机后开学生机。因为学生机开机需要读取教师机的镜像。但是状况依旧。 开始排查网络,重启交换机后,发现陆续有几台电脑能登陆进系统桌面了,但很慢起码过了5分钟以上才能进去。 教师机一直都是正常的,然后我在教师机部署电子教室。技术说这电子 教室与云教室IP冲突。 (那之后我查了下这两款软件的PID和端口,所占端口不一样,那没冲突) 我说不可能吧,这套软件在

Nightwish5的博客 2864

2 利用ITK实现多帧Dicom读取,VTK实现数据显示

vtk中也有dicom读写类,但是只能完成单帧DICOM数据读取,这对于实际应用是非常不利的。而ITK可以实现dicom多帧读取,通常情况ITK与VTK也会结合使用(ITK处理,VTK显示),所以就一起学习下吧!

buerbuhuitou的博客 1564

JVM与Spring Boot深度解析

开发者可以通过继承类或实现接口来创建自定义类加载器。自定义类加载器可以用于实现特定的类加载逻辑,例如实现热部署功能。自定义Starter可以提供项目所需的依赖和自动配置。创建一个Maven项目,添加必要的依赖。编写文件,定义自动配置类。编写自动配置类,实现自动配置逻辑。打包Starter为jar包。自定义Endpoint可以扩展Actuator的功能,例如添加自定义的健康指标、度量指标等。通过自定义@Bean的生命周期扩展点,可以扩展Spring Boot的自动配置功能。

我是Java程序员廖志伟,感谢朋友们的支持!不定期贡献一篇高品质、过万文字、图文并茂且附有视频解说、满载代码示例注释的良心之作,坚决杜绝粗制乱造。 1095

SAR成像概述

1. 发展概述 雷达是英文Radar(Radio detection and ranging)的音译,原意为“无线电探测与测距”。雷达的发明是无线电发展史上的里程碑,二战时,英国急需通过雷达探测空中金属物体来帮助搜寻德国飞机,这期间,雷达技术飞速发展,发展出了地对空、空对地轰炸、空对空火控、敌我识别等功能。雷达在第二次世界大战中发挥了重大作用,至今仍是军用和许多民用领域的重要传感器。 早期雷达系统通过时间延迟来测距,通过天线指向来测角,通过多普勒频移测速。1951年,Carl Wiley发现,通..

5068

JVM与Spring Boot核心解析

本文从JVM和Spring Boot两个角度,详细解析了核心知识点,包括类加载机制、内存模型、垃圾回收、自动配置、依赖管理、Actuator、配置文件管理、监控与日志等。通过这些知识点的串联,读者可以举一反三,更好地理解和应用JVM和Spring Boot技术。📥博主的人生感悟和目标- 💂博客主页Java程序员廖志伟- 👉开源项目Java程序员廖志伟- 🌥哔哩哔哩Java程序员廖志伟- 🎏个人社区Java程序员廖志伟- 🔖个人微信号SeniorRD。

JavaCodePro的博客 690

Unity之OpenXR+XR Interaction Toolkit实现 Gaze眼部追踪

在虚拟现实(VR)和增强现实(AR)应用中,眼动追踪是一项强大而受欢迎的技术。它可以让开发者更好地理解用户的注意力和行为,并创造出更加沉浸和智能的体验。在本文中,我们将探讨如何使用 Unity OpenXR 实现Gaze眼部追踪功能。

TxNet 1751

YOLOv12改进策略【卷积层】| 引入注意力卷积模块RFAConv,关注感受野空间特征 助力yolov12精度提升

RFAConv:创新空间注意力和标准卷积运算感受野空间特征是针对卷积核设计的,根据卷积核大小动态生成。以3×3卷积核为例,它由非重叠滑动窗口组成,每个窗口代表一个感受野滑块。

Limiiiing的博客 684

JVM与Spring Boot知识解析

在某些场景下,需要自定义类加载器以实现特定的功能,如加载特定来源的类或实现类隔离。自定义类加载器需要实现接口,并重写findClass方法。Spring Boot允许开发者创建自定义的Starter,以便在项目中轻松集成第三方库。创建一个Maven或Gradle项目,并添加必要的依赖。在文件中添加自定义Starter的类路径。创建一个配置类,用于定义自动配置逻辑。

我是Java程序员廖志伟,感谢朋友们的支持!不定期贡献一篇高品质、过万文字、图文并茂且附有视频解说、满载代码示例注释的良心之作,坚决杜绝粗制乱造。 1044

第150篇 激光雷达点云分割——地面分离、聚类分析和物体提取

本文介绍了点云分割的三种经典几何方法:RANSAC地面分离、欧式聚类和区域生长。RANSAC通过随机采样拟合平面实现地面分割,欧式聚类基于空间距离进行物体分割,区域生长则结合法线信息提升分割精度。文章对比了各种方法的优缺点,提供了参数选择建议,并指出实际项目中常组合使用这些方法。最后给出了面试应答技巧,强调几何方法速度快、可解释性强等优势,适合大多数机器人项目的实时需求。

郑伟强dev的专栏 192
上一篇: JVM & Spring Boot精髓解析
下一篇: Spring框架核心技术解析
Java廖志伟
博客等级 码龄2年 3609粉丝 1517原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值