JVM与Spring Boot精解

PX4从放弃到精通(二十一):使用git管理PX4代码 文章目录前言一、设置git密钥二、将代码上传至gitee 前言 Ubuntu 18.04 PX4 1.11.3 由于github有时网速较慢,本文使用gitee。 一、设置git密钥 ssh-keygen -t rsa -C “your_email@youremail.com” your_email@youremail.com为自己注册的gitee账户邮箱.设置路径与密码时,也直接回车不设置,如下图,密钥生成的位置在红框处. 在密钥目录下按Ctrl+H显示隐藏文件,进入.ssh文件夹用gedit打开id 阅读详情

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

📘拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、SpringBoot、SpringMVC、SpringCloud、Mybatis、Dubbo、Zookeeper),消息中间件底层架构原理(RabbitMQ、RocketMQ、Kafka)、Redis缓存、MySQL关系型数据库、 ElasticSearch全文搜索、MongoDB非关系型数据库、Apache ShardingSphere分库分表读写分离、设计模式、领域驱动DDD、Kubernetes容器编排等。不定期分享高并发、高可用、高性能、微服务、分布式、海量数据、性能调优、云原生、项目管理、产品思维、技术选型、架构设计、求职面试、副业思维、个人成长等内容。

Java程序员廖志伟

🌾阅读前,快速浏览目录和章节概览可帮助了解文章结构、内容和作者的重点。了解自己希望从中获得什么样的知识或经验是非常重要的。建议在阅读时做笔记、思考问题、自我提问,以加深理解和吸收知识。阅读结束后,反思和总结所学内容,并尝试应用到现实中,有助于深化理解和应用知识。与朋友或同事分享所读内容,讨论细节并获得反馈,也有助于加深对知识的理解和吸收。💡在这个美好的时刻,笔者不再啰嗦废话,现在毫不拖延地进入文章所要讨论的主题。接下来,我将为大家呈现正文内容。

优快云

一、JVM知识体系

类加载机制

Java虚拟机(JVM)的类加载机制是Java语言运行时环境的核心组成部分,它负责将类定义信息从字节码文件转换为JVM能够识别的运行时数据结构。类加载机制包括以下几个关键步骤:

  • 加载(Loading):通过类加载器将指定名称的.class文件读入JVM,并为之生成一个Class对象。这个过程涉及到文件定位、读取、字节码验证、转换等操作。类加载器可以是启动类加载器(Bootstrap ClassLoader)、扩展类加载器(Extension ClassLoader)和应用类加载器(Application ClassLoader)。

  • 验证(Verification):确保加载的类信息符合JVM规范,不危害JVM安全。验证过程包括文件格式验证、字节码验证、符号引用验证等。

  • 准备(Preparation):为类变量分配内存,并设置默认初始值。对于static变量,这部分内存位于方法区。

  • 解析(Resolution):将符号引用转换为直接引用,包括将类、接口、字段和方法的符号引用转换为直接引用。

  • 初始化(Initialization):执行类构造器方法<clinit>(),初始化类变量,设置类静态变量,初始化静态常量等。

双亲委派模型

双亲委派模型是一种类加载策略,它要求除了顶层的启动类加载器外,其余类加载器都应当有自己的父类加载器。这种模型的目的是避免类的重复加载,确保类型安全。

  • 启动类加载器:负责加载<JAVA_HOME>/lib目录中的类库和JRE库。
  • 扩展类加载器:负责加载<JAVA_HOME>/lib/ext目录中的类库和JVM启动参数中指定的类库。
  • 应用类加载器:负责加载用户类路径(classpath)上的类库。
自定义类加载器

自定义类加载器允许开发者实现特定的类加载逻辑,例如,加载特定格式的文件或从网络资源加载类。

  • 继承ClassLoader:通过继承ClassLoader类并重写findClass方法,实现自定义的类查找逻辑。
  • 实现ClassLoading接口:通过实现ClassLoading接口,定义类加载的生命周期。
模块化系统(JPMS)

Java Platform Module System(JPMS)是Java 9引入的模块化系统,它通过模块来组织代码,提高了代码的可维护性和安全性。

  • 模块定义:使用module-info.java文件定义模块的名称、依赖和公开的包。
  • 模块解析:JVM使用模块路径来解析模块依赖。
  • 模块加载:JVM按需加载模块,并确保模块间的隔离。
内存模型

JVM的内存模型分为运行时数据区和线程栈。

  • 运行时数据区:
    • 堆:用于存放几乎所有的对象实例和数组的内存区域。堆的大小可以通过JVM参数-Xms和-Xmx进行设置。
    • 栈:用于存放局部变量和方法调用的内存区域。每个线程都有自己的栈。
    • 方法区:用于存放已被虚拟机加载的类信息、常量、静态变量等数据。方法区的大小通常比堆小。
    • PC寄存器:用于指示当前线程所执行的指令。
内存溢出场景分析

内存溢出通常发生在堆空间不足时,可能导致应用程序崩溃。常见的内存溢出场景包括:

  • 创建大量对象:例如,在循环中创建大量临时对象。
  • 循环引用:两个对象相互引用,导致垃圾回收器无法回收。
  • 大型数据结构:例如,大型数组或集合。
垃圾回收

垃圾回收(GC)是JVM自动内存管理的一部分,它通过回收不再使用的对象来释放内存。

  • GC Roots可达性分析:从GC Roots开始,向上遍历可达性链,确定哪些对象是可达的,不可达的对象将被回收。
  • 分代收集理论:将堆空间分为年轻代(Young)和老年代(Old),针对不同年代的对象使用不同的回收策略。
  • 引用类型:包括强引用、软引用、弱引用和虚引用,不同的引用类型在垃圾回收时的处理方式不同。
垃圾回收算法
  • 标记-清除:先标记所有可达对象,然后清除未标记的对象。
  • 复制:将对象复制到另一个内存区域,然后清理原内存区域。
  • 整理:移动对象并压缩内存空间,减少内存碎片。
并发收集器
  • CMS(Concurrent Mark Sweep):一种以获取最短停顿时间为目标的收集器。
  • G1(Garbage-First):一种面向服务端应用的收集器,它将堆内存分割成多个区域,优先回收垃圾最多的区域。
  • ZGC(Z Garbage Collector):一种低延迟的垃圾回收器,旨在减少停顿时间。
停顿时间控制策略

JVM提供了多种策略来控制停顿时间,包括调整堆大小、使用不同的收集器等。

性能调优

JVM性能调优包括配置JVM参数、监控内存使用情况、优化代码等方面。

  • JVM参数配置:如-Xms和-Xmx用于设置堆空间大小。
  • 内存泄漏诊断:使用工具如MAT(Memory Analyzer Tool)来诊断内存泄漏。
JIT编译优化

JIT编译器是JVM的一部分,它可以将Java字节码编译成本地机器码,提高程序运行效率。

二、Spring Boot知识体系

自动配置

Spring Boot通过自动配置功能简化了Spring应用的配置。当Spring Boot启动时,它会自动配置依赖的Bean。

  • @EnableAutoConfiguration原理:Spring Boot在启动时会扫描所有可用的配置类,并根据条件判断是否启用某些配置。这些条件包括类路径下是否存在某些类、配置文件中的属性等。
  • 条件化配置(@Conditional):允许基于特定的条件来启用或禁用配置。例如,@ConditionalOnClass可以根据类路径下是否存在某个类来启用或禁用配置。
自定义Starter开发

开发者可以通过创建自定义Starter来简化项目的依赖管理。

  • 起步依赖:包含项目所需的全部依赖。起步依赖通常使用Maven或Gradle进行管理。
  • 依赖管理机制:使用Maven或Gradle进行依赖管理。例如,在Maven项目中,可以使用<dependencyManagement>标签来定义依赖的版本。
版本冲突解决

Spring Boot使用BOM(Bill of Materials)来管理依赖的版本,以避免版本冲突。

  • BOM:BOM定义了所有依赖的版本,确保所有模块使用相同的版本。
第三方库集成模式

Spring Boot支持多种第三方库集成模式,如自动配置、配置文件等。

  • 自动配置:Spring Boot会根据依赖的第三方库自动配置相应的Bean。
  • 配置文件:Spring Boot支持多种配置文件格式,如application.properties和application.yml。
Actuator

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

  • 健康检查端点:用于检查应用程序的健康状况。开发者可以自定义健康指标。
  • 度量指标收集:收集应用程序的性能数据,例如,HTTP请求、数据库连接等。
  • 自定义Endpoint开发:允许开发者创建自定义的端点,用于监控和管理应用程序。
配置文件管理

Spring Boot支持多环境配置,通过application-{profile}.yml文件来管理不同环境下的配置。

  • 多环境配置:例如,开发环境、测试环境和生产环境。
  • 配置加载优先级:Spring Boot会按照一定的优先级加载配置。
动态配置刷新

Spring Boot支持动态刷新配置,允许在运行时更改配置而无需重启应用程序。

监控与日志

Spring Boot集成了Micrometer和Logback/SLF4J等工具,用于监控和日志管理。

  • Micrometer:提供了一种统一的度量标准,支持多种监控工具。
  • Logback/SLF4J:提供日志管理功能,支持多种日志框架。
分布式链路追踪扩展机制

Spring Boot支持分布式链路追踪,允许开发者追踪跨多个服务的请求。

  • 自定义AutoConfigurationBean:允许开发者自定义自动配置的Bean。
  • 生命周期扩展点:允许开发者扩展Spring Boot的生命周期。
响应式编程支持

Spring Boot支持响应式编程,允许开发者使用Stream API等工具来处理异步数据流。

通过以上对JVM和Spring Boot知识体系的详细解析,我们可以看到这两个技术是如何相互关联和补充的。JVM提供了Java应用程序的运行环境,而Spring Boot则在此基础上简化了Spring应用的配置和管理。通过深入理解这两个技术,开发者可以构建更加高效、可维护的Java应用程序。

优快云

📥博主的人生感悟和目标

Java程序员廖志伟

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

- 💂 博客主页: Java程序员廖志伟
- 👉 开源项目: Java程序员廖志伟
- 🌥 哔哩哔哩: Java程序员廖志伟
- 🎏 个人社区: Java程序员廖志伟
- 🔖 个人微信号: SeniorRD

Java程序员廖志伟

📙经过多年在优快云创作上千篇文章的经验积累,我已经拥有了不错的写作技巧。同时,我还与清华大学出版社签下了四本书籍的合约,并将陆续出版。这些书籍包括了基础篇、进阶篇、架构篇的📌《Java项目实战—深入理解大型互联网企业通用技术》📌,以及📚《解密程序员的思维密码--沟通、演讲、思考的实践》📚。具体出版计划会根据实际情况进行调整,希望各位读者朋友能够多多支持!

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

树冠体积计算之体元累加法 因为是自己之前研究的一个方向,就复现了一下论文中的这个方法,在此正好记录一下。 文章目录一、简介二、代码实现(MATLAB)三、小结 一、简介 简而言之,其实就是一句话,即以固定大小的体元模拟不规则的树冠形状。按照论文中的思路主要就是将树冠沿树高方向以 k 为步长进行等距离分段,把每一段树冠的点投影到垂直于树高方向的平面上,再对该平面划分成大小为 k × k 的像元,根据投影到各个像元内点的数量,判断该像元的有效性,统计有效像元的数量 T,则树冠体积为 T 个 k × k × k 的体元之和。如下图所示: 阅读详情

相关推荐

apm软件仿真+QGC地面站 环境搭建

本教程使用场景:apm软件仿真运行于虚拟机 ubuntu环境。qgc地面站位于windows 系统。两个环境在同一台电脑上。 一.apm仿真环境搭建 1.安装vm虚拟机及ubuntu 18。 2.ubuntu下 下载Ardupilot 飞控源码 并配置环境。 下载源码: git clone https://github.com/ArduPilot/ardupilot cd ardupilot git submodule update --init --recursive 配置所需运行的环境:

qthello 6109

JVM & Spring Boot精解

在某些特定场景下,如实现插件机制、模块化系统等,需要自定义类加载器。自定义类加载器可以重写findClass方法,实现类文件的读取和解析逻辑。模块定义文件(module-info.java)用于声明模块的名称、依赖关系、导出和开放包等信息。模块之间通过模块名称进行访问控制。自定义Starter可以简化第三方库的集成。创建一个Maven项目,并添加Spring Boot的依赖。创建一个Starter POM文件,定义Starter的依赖关系。创建一个自定义配置类,实现自动配置逻辑。

JavaCodePro的博客 369

大整数因数分解工具——yafu

可以将大整数放在一个新建文件中——data.txt,最后面一定要换行,不然会出现eof;done processing batchfile,运行命令。2.点击设置——系统——系统信息——高级系统设置——环境变量——点击PATH(上下都可以)——新建 添加yafu-x64.exe 所在路径——点击确定。,如果整数数过长,会出现错误mismatched parens;1.找到yafu-x64.exe 所在的文件路径。如果出现以下图像,说明配置成功。3.打开cmd,输入。

l2ohvef的博客 6156

JVM知识体系精解

开发者可以通过继承类或实现接口来创建自定义类加载器。自定义类加载器可以用于实现特殊的类加载逻辑,例如实现特定的文件格式解析或加载远程资源。开发者可以通过创建Maven或Gradle的Starter项目来简化依赖管理。Starter项目包含了一组自动配置的依赖,使得开发者可以轻松地添加所需的库。

MoneyHacksPro的博客 587

Qt5.12.12安卓开发环境搭建:Windows下避开SDK版本坑的保姆级教程

本文提供Qt5.12.12在Windows下搭建Android开发环境的详细教程,重点解决SDK版本兼容性问题,特别是cmdline-tools与JDK8的匹配陷阱。通过精准选择组件版本、手动配置路径和修复常见错误,帮助开发者高效完成环境配置,适用于Qt跨平台移动开发。

weixin_33737774的博客 542

iOS反编译-hook微信之艾特所有人

all。

2501_90243249的博客 759

JVM与Spring Boot解析

自定义类加载器允许开发者在特定的类加载场景下,实现自己的类加载逻辑。例如,实现URL类加载器,用于从特定的URL加载类。自定义Starter可以帮助我们快速集成第三方库。例如,我们可以创建一个名为my-starter的Starter,将第三方库的依赖添加到Starter的pom.xml文件中,并提供一个自动配置类。自定义Endpoint允许我们扩展Actuator的功能。例如,我们可以创建一个自定义的Endpoint,用于获取应用的特定信息。

JavaCodePro的博客 835

EVE-NG 新增 qcow2 镜像教程

本文介绍了如何在 EVE-NG 网络仿真平台中添加 QCOW2 镜像并配置 YML 文件。首先,用户需要了解 EVE-NG 的目录结构,上传并重命名 QCOW2 镜像,然后设置文件权限并刷新界面以识别设备。接着,讲解了 YML 文件的作用,它用于定义设备的CPU、内存、网卡等参数,并给出了配置示例。若有多个设备版本,可以通过复制并重命名 YML 文件使其独立显示。最后,通过检查 QEMU 进程和日志验证 YML 配置是否生效。总结部分强调了 EVE-NG 的自动识别机制以及独立管理设备版本的方式。

qq_41862216的博客 3075

JVM与Spring Boot深度解析

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

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

基于POD和神经网络的多工况温度场重构反演系统

本文提出了一种基于本征正交分解(POD)和神经网络的多工况温度场重构反演系统。该系统通过POD方法从多工况温度场数据中提取主要特征模态,构建神经网络模型建立工况参数与POD模态系数的映射关系,实现温度场的快速重构。系统采用Python实现,包含数据预处理、POD分解、神经网络训练和温度场重构等模块。实验结果表明,该方法能够有效降低计算复杂度,实现高精度的温度场预测。

huanghm88的专栏 274

2025.05.30【转录组】|Ribo-seq数据流程详解(一 质量控制)

本文详细介绍了Ribo-seq数据的质控分析流程,重点讲解了使用fastp进行原始数据质控的关键步骤和参数设置。作者通过Snakemake自动化流程示例,展示了如何去除接头序列、过滤低质量reads、生成质控报告等操作。文章强调高质量的Ribo-seq数据对转录后调控和翻译动态研究的重要性,并提供了兼顾数据质量和下游分析需求的参数配置建议。该流程有助于研究人员规范高效地完成Ribo-seq数据质控,为后续分析提供可靠数据基础。

784

JVM与Spring Boot核心解析

自定义类加载器允许开发者根据特定需求控制类的加载过程。类加载器继承:自定义类加载器通常继承自类。覆盖方法:自定义类加载器需要覆盖方法来实现自定义的类查找逻辑。类加载策略:自定义类加载器可以采用多种类加载策略,如基于文件系统、基于数据库、基于网络等。自定义Starter可以简化其他开发者使用你的库的过程。起步依赖:起步依赖定义了项目所需的依赖关系,通常使用Maven或Gradle来管理。依赖管理机制:使用BOM(Bill of Materials)文件来管理依赖版本,以解决版本冲突问题。

MoneyHacksPro的博客 909

【Envi风暴】Envi5.6安装图文教程(附Envi5.6完整版下载)

【Envi风暴】Envi5.6与应用商店app store安装图文教程(附Envi5.6完整版下载)从文末网盘下载完整的ENVI5.6安装包,如下所示:双击envi56-win.exe,开始安装。将f__x64下的两个补丁文件拷贝到安装路径。将f__x86下的两个补丁文件拷贝到安装路径。

智慧空间实验室 9193

JVM与Spring Boot详解

Java虚拟机(JVM)是Java程序的运行环境,它负责将Java字节码转换为机器码,实现跨平台运行。JVM的这种设计允许Java程序在任意硬件和操作系统上运行,只要存在对应的JVM实现。JVM由以下几个主要部分组成:类加载器、运行时数据区、执行引擎、本地库接口和垃圾回收器。类加载器负责将Java源代码编译成的.class文件加载到JVM中,这个过程称为类加载。运行时数据区是JVM在运行过程中使用的内存区域,包括方法区、堆、栈、程序计数器、本地方法栈等。

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

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Java JVM与Spring Boot深度解析

开发者可以通过继承类或实现接口来创建自定义类加载器。例如,可以创建一个URL类加载器,用于加载位于特定URL路径下的类文件。每个模块都由一个描述文件定义,其中包含了模块的名称、所需模块、导出模块、打开的包等信息。开发者可以通过创建Maven项目并添加依赖来开发自定义Starter。自定义Starter需要实现接口,并定义所需的依赖。开发者可以通过实现Endpoint接口来开发自定义端点。自定义端点可以用来提供应用程序的特定信息。开发者可以通过实现接口来自定义AutoConfigurationBean。

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

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

JVM与Spring Boot知识解析

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

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

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

JVM与Spring Boot核心机制

自定义类加载器允许开发者根据特定的需求加载类。例如,可以实现一个类加载器来从特定的文件系统目录加载类,或者从网络加载。自定义类加载器可以扩展JVM的类加载机制,实现更加复杂的类加载逻辑。自定义Starter可以帮助开发者快速集成第三方库。开发者可以将常用的依赖和配置整合到一个Starter中,简化项目的依赖管理。自定义Endpoint可以帮助开发者扩展Actuator的功能。通过实现特定的Endpoint,开发者可以提供自定义的监控数据或执行自定义的操作。

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

JVM与Spring Boot精髓

自定义类加载器允许开发者实现自己的类加载逻辑,以满足特定的需求。例如,可以从特定的URL加载类,或者对加载的类进行特定的处理。自定义Starter可以帮助开发者将库或框架集成到Spring Boot项目中。Maven POM文件:自定义Starter需要创建一个Maven POM文件,其中定义了项目依赖和插件。Spring Boot项目:将自定义Starter添加到Spring Boot项目中,并使用Starter注解。自定义Endpoint允许开发者创建自己的端点,以提供额外的监控和管理功能。

MoneyHacksPro的博客 835
上一篇: Spring框架核心技术揭秘
下一篇: JVM & Spring Boot核心解析
Java开发廖志伟
博客等级 码龄2年 3491粉丝 1534原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值