文章先介绍 Java7 中 HashMap 的实现细节:内部是容量为 2ⁿ 的数组,数组元素为单向链表,核心属性包括 hash、key、value、next;阈值由容量和 0.75 的负载因子决定。put 时先计算 hash、定位桶、遍历链表检查冲突,若需扩容则双倍扩容并重新分配节点;get 只需根据 hash 定位桶并遍历链表查找。随后分析 Java7 ConcurrentHashMap 的实现:采用固定长度的 Segment 数组(默认 16),每个 Segment 继承 ReentrantLock 实现分段锁,保证并发写安全。初始化时根据并发级别计算 segmentShift、segmentMask 并为每个 Segment 分配独立的哈希表;put 时先计算 key 的 hash,再通过高位定位对应 Segment,确保 Segment 已创建后在其内部执行类似 HashMap 的插入逻辑。全文通过源码逐行解释了两者的结构、容量扩容和查询/插入流程,突出 HashMap 的单线程简洁和 ConcurrentHashMap 的分段锁并发实现。

对象创建首先检查类是否已加载、解析、初始化;随后在堆中分配内存,常用“指针碰撞”或“空闲列表”方式,并通过 CAS 或 TLAB(-XX:+UseTLAB)解决并发冲突。分配后进行零值填充、设置对象头(包含哈希、GC 年龄、锁状态、类指针等)并执行构造函数。HotSpot 将对象布局划分为对象头、实例数据和对齐填充,支持 32 位压缩指针(-XX:+UseCompressedOops/-UseCompressedClassPointers)以降低内存占用并提升 GC 效率。对象大小可用 JOL 查看,指针压缩在堆 ≤ 32 GB 时有效。通过逃逸分析和标量替换(-XX:+DoEscapeAnalysis),JVM 能在对象不逃逸时将其分配到栈上,减轻堆内存压力并提升性能。

本文以 Spring Cloud Alibaba 为例,演示了微服务项目的搭建流程。首先创建 Maven 父工程 cloud2021,统一管理 Spring Boot、Spring Cloud、Alibaba 以及常用库(MySQL、Druid、MyBatis、Lombok 等)版本,并通过 dependencyManagement 实现子模块继承。随后在父工程下新增支付提供者模块 cloud-provider-payment8001,编写其 pom.xml 引入公共 API、Web、Actuator、MyBatis、Druid 等依赖。通过 application.yml 配置服务端口、Spring 应用名、Druid 数据源及 MyBatis 映射路径,最后提供启动类 PaymentMain8001。全文展示了从父工程定义、版本统一到子模块依赖、数据库配置、启动入口的完整步骤,为微服务入门提供了可复制的实战模板。

JVM 启动时先通过类加载器将主类加载到方法区,完整的加载过程包括:加载‑读取字节码并生成 Class 对象、验证‑校验字节码合法性、准备‑为静态字段分配内存并设默认值、解析‑将符号引用转为直接引用、初始化‑执行静态代码块和赋值。类加载采用延迟策略,只有在实际使用时才加载,如示例中 B 未实例化则不被加载。JVM 内置三套加载器:引导类加载器负责 JRE 核心库,扩展类加载器负责 lib/ext 目录,应用程序类加载器负责 classpath 下的用户类,用户还可自定义加载器。Launcher 启动器在构造时创建 ExtClassLoader 与 AppClassLoader,并将后者设为线程上下文加载器。加载器遵循双亲委派模型:先让父加载器尝试加载,若未找到再由当前加载器自行查找,保证核心类优先由引导加载器加载,避免类冲突。

文章演示了在 Spring Boot 项目中集成 Mybatis‑Plus 完成对 MySQL 表的增删改查。首先创建 `tbl_employee` 表并插入示例数据;随后使用 Spring Initializr 初始化项目并在 `pom.xml` 中加入 Mybatis‑Plus、MySQL、Druid 等依赖。将数据库连接配置写入 `application.yml`,利用 Lombok 编写实体类并用 `@TableName`、`@TableId`、`@Version` 标注;定义继承 `BaseMapper` 的 Mapper 接口。通过 `@MapperScan` 扫描 Mapper 包,使用 JUnit 编写测试分别验证 `selectList`、`insert`、`update`、`delete` 等 CRUD 方法,展示 Mybatis‑Plus 的简洁 API 实现数据库操作的完整流程。

本文演示了在已装 Docker 的服务器上,通过 Docker 部署单节点 Elasticsearch(7.12.1)和 Kibana(7.12.1),包括创建网络、加载镜像、指定内存、挂载卷、端口映射等运行参数。随后利用 MyBatis‑Plus 在 Java 中批量读取 MySQL 中的 hotel 表数据,转换为 HotelDoc 并使用 Elasticsearch RestHighLevelClient 的 BulkRequest 将数据写入名为 hotel 的索引。最后在 Kibana 的 DevTools 与可视化页面验证数据已成功导入并展示。整个流程覆盖环境搭建、容器互联、数据迁移与可视化展示。