自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(227)
  • 收藏
  • 关注

原创 Java 对象的内存密语:从字段偏移量计算到 Unsafe 访问的完整链路

解耦与延迟:字段偏移量的计算发生在类加载后处理阶段,与字节码解析解耦;偏移量的存储紧凑且带标记,节省内存。优化第一:基本类型字段降序排列、best‑fit 空隙填充、对齐调整,都是为了减少对象大小并提高访问效率。并发感知@Contended注解的填充机制直接融合在布局算法中,体现了 JVM 对多核时代的适应。底层访问友好Unsafe直接消费这些偏移量,使得 JVM 内部和 JDK 底层库(如AtomicLong)能够实现极高性能的字段访问。当你下次使用Unsafe或者好奇某个long。

2026-06-14 21:05:07 174

原创 从 Thread.setName 到内核:Java 线程命名的完整穿越之旅

从到内核,这趟旅程跨越了 Java 虚拟机、C 运行时库和操作系统内核。每一层都有各自的设计哲学:Java 层注重安全与易用性,JVM 层做了严格的权限控制,glibc 层提供了兼容不同场景的分支实现,而内核则通过统一的comm字段和 proc 接口,简洁地完成了最终的存储。理解这条完整的调用链,不仅能帮助我们写出更高效的多线程代码,还能在遇到线程名相关问题(如jstack与ps看到的名称不一致)时,快速定位根因。希望这篇博客能让你对 Java 线程命名的“内幕”有更深入的认识。##源码。

2026-06-12 18:12:17 195

原创 深入 OpenJDK 17 源码:Java Native 方法的注册、绑定与调用全流程

Java 代码调用→start0()(native)。解释器/JIT发现Method的还未设置,调用。Wrapper 生成计算 C 调用约定的参数位置。移动参数(handlize 对象)。建立栈帧、保存寄存器。设置、切换线程状态。调用(即返回后处理安全点、恢复状态、处理结果。在jvm.cpp中实现,最终调用操作系统的线程创建函数(如控制权回到 wrapper,然后返回到 Java 代码。JNI 动态注册使用方法表,比静态命名查找更高效、灵活。Method对象。

2026-06-04 17:01:40 209

原创 Java创建文件背后的JNI机制:从registerNatives到Native Wrapper的深度剖析

Java层JVM层:解释器找到Method对象,发现是native且未生成wrapper -> 调用生成定制桩代码。Wrapper:保存现场,将参数从Java约定转为C约定,设置线程状态,调用注册的C函数指针(如JVM_WriteJVM内建函数JVM_Write经过安全校验后,调用平台相关的os::write。操作系统write系统调用陷入内核,VFS层处理,最终写入磁盘驱动。返回路径:沿着调用链逆向返回,wrapper将返回值和可能异常转换回Java语义。而这一切的起点,是类加载时或<clinit>

2026-06-03 10:31:25 253

原创 Java 创建文件:从 File.createNewFile() 到 ext4 的完整内核之旅

Java要求“如果文件不存在则创建,否则返回 false”这一操作是原子的。POSIXopen的:这是内核系统调用级别的原子操作。在openat执行过程中,对文件是否存在和创建的动作是在持有父目录 inode 锁以及 dentry 锁的情况下完成的,因此两个并发的openat调用不可能同时创建同名文件:一个成功,另一个返回EEXIST。JNI 层:仅仅是对系统调用的简单封装,没有引入额外的竞争窗口。VFS 层在决定创建之前会再次检查 dentry 是否已经变为阳性,这进一步强化了原子性。文件系统层。

2026-06-02 13:41:06 179

原创 走进 Linux 内核:从 touch 命令到磁盘 inode 的完整旅程

几乎每个 Linux 用户都曾用过touch命令。你可能知道,当文件不存在时它会创建一个空文件;当文件已存在时,它会更新文件的访问时间和修改时间。但你是否想过,这个简单的命令是如何一步步将请求从键盘传递到磁盘的?用户空间的main函数做了哪些判断?内核 VFS(虚拟文件系统)如何将路径解析成 dentry?ext4 文件系统又是怎样从数十亿个 inode 中找到一个空闲位,然后将其写入磁盘?本文以Linux 内核 6.8.12 源码和GNU Coreutils touch 实现。

2026-06-01 10:38:10 201

原创 从mkdir命令到磁盘:Linux内核目录创建过程深度解析

下图(文字描述)展示了mkdir的完整调用链:text用户态: mkdir("test", 0755)v系统调用: sys_mkdir -> do_mkdirat(AT_FDCWD, name, mode)vVFS路径解析: filename_create() 获取父目录path和新目录dentryv安全检查: security_path_mkdir()vVFS通用操作: vfs_mkdir()| - may_create() 权限检查。

2026-05-30 17:17:54 391

原创 深入OpenJDK 17:Java对象分配、内存不足与VMThread协作的垃圾回收机制

Java开发者常常依赖JVM的自动内存管理,当堆内存不足时,垃圾回收器(Garbage Collector,GC)会被触发以回收空间。然而,GC操作并非由触发分配的Java线程直接执行,而是通过一个专门的JVM内部线程——VMThread——来调度和执行。本文将基于OpenJDK 17的源码,深入剖析一个Java线程在分配对象时遇到内存不足,如何请求并等待GC完成,以及VMThread如何响应、执行垃圾回收的完整链路。我们将从出发,经过,到和,揭示JVM背后精巧的协作机制。

2026-05-21 10:57:15 168

原创 深入剖析 OpenJDK 17 解释器中的安全点(Safepoint)进入与退出机制

入口点准备为每个 TosState 生成安全点入口,调用。状态转换 RAIIJRT_ENTRY宏中的负责 Java ↔ VM 状态的切换,并在转换期间插入安全点检查。统一轮询机制通过线程本地 polling word 和全局标志实现轻量级的安全点检测。阻塞等待利用高效挂起和唤醒线程。解释器轮询点中的testb指令在每个字节码调度时检查安全点请求,并切换到安全点分发表。

2026-05-16 12:04:11 432

原创 深入 Linux 内核同步机制:从 futex 到 spinlock 的完整旅程

futex 是 Linux 提供的一种快速用户态互斥体机制。在无竞争的情况下,所有操作都在用户态完成,不需要陷入内核;只有在发生竞争时,才通过系统调用进入内核进行排队和唤醒。这种设计极大地提升了性能,因为绝大多数锁操作都是无竞争的。futex_wait和futex_wake是两个最核心的系统调用。本文从用户态的一个futex_wait调用出发,沿着代码执行路径深入内核,最终到达 CPU 的原子指令。futex 系统调用:用户态与内核态的边界hash bucket 机制。

2026-05-02 15:00:03 483

原创 从pthread_mutex_lock到futex:glibc与Linux内核的互斥锁实现深度剖析

Futex(Fast Userspace Mutex)是 Linux 内核提供的一种基础同步机制,它的核心设计哲学是无竞争时完全在用户空间完成,仅在发生竞争时才需要陷入内核。一个 futex 本质上是一个用户空间的内存地址(通常是 32 位整数),线程可以通过原子操作来修改这个整数实现锁的获取与释放。当没有竞争时,整个加锁解锁过程不涉及任何系统调用,开销与自旋锁相当。仅当发生竞争时,才通过futex()系统调用让内核介入,将未能获得锁的线程放入等待队列并调度出去。这种。

2026-04-30 11:41:08 449

原创 Linux内核启动(init)与程序执行(execve)深度解析:从kernel_init到load_elf_binary

当我们按下电源键,BIOS进行自检,引导加载程序(GRUB)将内核映像载入内存,然后内核开始执行。从到rest_init,内核完成了大量的初始化工作:初始化中断、内存管理、调度器、文件系统……然而,直到用户空间的第一个进程 ——init进程被启动之前,系统仍然处于“内核态独占”的状态。用户空间的第一个进程的诞生,标志着操作系统真正走向可用。那么,内核是如何从内核线程转变为执行用户空间/sbin/init的呢?execve系统调用在这个过程里扮演了什么角色?ELF二进制文件又是如何被识别、加载并最终执行的。

2026-04-25 17:39:15 413

原创 深度剖析:从 clone3 到 start_routine —— Linux 新线程的“破茧成蝶”之旅

最终会调用到,然后进入中的,但最底层的汇编路径仍然指向。你提供的entry_64.S中包含了这个标签的完整实现(前面已经贴过)。我们再仔细看几步:assemblyIBRS_EXIT/* 处理 Xen PV 和 PTI 的替代跳转 */POP_REGS // 恢复所有通用寄存器add $8, %rsp // 跳过 orig_axswapgstestb $3, 8(%rsp) // 检查 CS 的低 2 位,看是不是用户模式ud2。

2026-04-24 19:07:37 459

原创 从 pthread_create 到 thread_native_entry:glibc 如何唤醒 Java 线程

从 JVM 的到最终被执行,glibc 扮演了一个“幕后导演”的角色:它并没有简单地将用户函数地址传递给内核,而是插入了一个包装函数。这个包装函数负责所有 POSIX 线程必须的初始化、同步、清理工作,并在适当的时机回调用户函数。理解了这一层设计,就能明白为什么的入口函数必须遵循的签名,以及为什么线程退出时能够自动释放栈和 TLS。对于 JVM 开发者来说,这不仅是底层知识的补充,更是调试线程创建问题(如失败、线程启动卡死)的有力工具。当你下一次在 JVM 源码中看到。

2026-04-21 20:58:09 374

原创 深入浅出:从JVM线程创建到Linux内核clone系统调用

层次职责关键动作JVM管理Java线程对象,控制启动时机设置pthread属性(挂起启动、栈大小补偿、禁用guard page)glibc实现POSIX线程语义,分配用户栈和TCB构造clone_args,调用clone3/clone系统调用Linux内核创建内核task_struct,调度执行根据flags共享资源,设置TLS,返回用户态执行函数几个值得深思的设计点挂起启动的必要性:JVM需要确保新线程在完全初始化之前不执行Java代码,否则可能看到不一致的JVM内部状态。

2026-04-21 19:57:06 480

原创 深入剖析 Tomcat 9.0.53 源码:Web 资源管理与类加载机制

分层资源集合提供了灵活的覆盖和组合能力,支持从目录、JAR、外部位置等多种来源透明地获取资源。统一的抽象屏蔽了文件系统、JAR、内存等不同存储方式的差异。定制类加载器既遵循 Servlet 规范的要求(允许 Web 应用覆盖部分类,同时保护 JDK 类),又通过缓存、字节码转换等特性提升了性能和可扩展性。理解这些底层机制,不仅有助于诊断应用部署中的、资源找不到等问题,也为编写高性能、高可靠性的 Tomcat 应用打下坚实基础。

2026-04-14 08:44:10 487

原创 Redis 的定时心脏:serverCron 与集群故障转移的幕后故事

从serverCron到公平性与低延迟:通过轮询和动态 hz 保证大量客户端能被及时处理,避免某些连接饿死。内存效率:定期收缩缓冲区、跟踪内存用量,为内存管理和客户端驱逐提供依据。高可用自动恢复:故障转移中的延迟选举、数据新鲜度检查,确保了数据一致性和选举的稳定性。性能敏感性:所有后台操作都是增量、分片的,避免一次性做大量工作阻塞主线程。Redis 的单线程模型并非真的“单打独斗”,正是依靠这些精巧的定时任务,它才能在处理百万级 QPS 的同时,优雅地完成自我维护和故障恢复。

2026-03-01 10:48:48 1048

原创 Linux内核中的返航:从系统调用出口到信号处理的旅程

从开始,到do_exit结束,Linux内核为每一次“返航”都设计了严密的检查与处理流程。信号作为进程间通信和异常处理的重要机制,恰好嵌入在这个返回路径中:无论是系统调用中途被信号中断,还是用户态程序主动接收信号,内核都会在即将返回用户空间的那一刻,将信号“递送”给进程。如果信号是致命的,则触发进程的自我了断,完成最后的清理工作。这一套机制体现了内核设计的精巧与严谨:既保证了异步事件的及时响应,又确保了资源回收的完整性。理解这段旅程,有助于我们更深入地把握Linux进程的生命周期与信号系统的内在逻辑。

2026-03-01 10:45:28 613

原创 Linux 7 中的系统调用原理

用户空间 write() → syscall 指令 → 硬件切换 → entry_SYSCALL_64 → 保存上下文 → do_syscall_64 → 系统调用表 → __x64_sys_write → ksys_write → vfs_write → 具体文件系统操作 → 返回结果 → 恢复上下文 → sysret/iret → 用户空间这个架构在保持兼容性的同时,实现了高效的系统调用处理,是现代 Linux 系统性能的关键组成部分。##源码if (!if (!if (ret)

2026-02-03 12:29:12 931

原创 深入理解Linux进程上下文切换:从__schedule到线程切换

调度层__schedule):做出"切换谁"的决策内存管理层):处理地址空间切换硬件抽象层):处理架构特定的状态保存恢复汇编层):执行最底层的寄存器切换这种设计不仅清晰分离了关注点,还允许不同架构提供自己的优化实现。每次上下文切换虽然只有微秒级的时间开销,但正是这精妙的机制支撑起了整个Linux系统的多任务魔法。通过源码分析,我们看到了操作系统设计中的诸多智慧:惰性TLB切换优化性能、FPU状态延迟加载减少开销、对硬件bug的巧妙规避。这些细节共同确保了Linux能够在各种硬件上高效可靠地运行。

2026-01-28 08:57:00 676

原创 深入剖析Spring定时任务:从ThreadPoolTaskScheduler到ScheduledThreadPoolExecutor

Spring的定时任务调度机制是一个精心设计的系统,它通过多层抽象和优化,提供了可靠、高效的定时任务执行能力。从到,再到,每一层都有其特定的职责和优化策略。任务装饰:Spring为原始任务添加了错误处理逻辑线程池管理:通过核心线程预启动确保及时执行延迟队列优化:使用堆结构和leader-follower模式提高效率周期性任务处理:支持固定频率和固定延迟两种模式理解这些底层机制,有助于我们在实际开发中更好地使用和调试定时任务,构建更稳定可靠的应用系统。##源码@Overridetry {

2026-01-17 12:46:44 768

原创 Spring Boot 与 Tomcat 错误页面处理机制深度解析

Spring Boot 与 Tomcat 的错误页面处理机制展示了优秀框架设计的核心原则:兼容性、灵活性和性能的平衡。在微服务架构日益流行的今天,优雅的错误处理不仅是用户体验的保障,也是系统可观测性的重要组成部分。的缓存机制(-128 到 127),对于常见的 HTTP 状态码(如 404、500),这可以避免不必要的对象创建。这些属性为错误页面提供了完整的上下文信息,使得错误页面能够显示详细的错误信息,同时保持了原始请求的完整性。这种分离存储的设计优化了查找效率,避免了遍历所有错误页面的开销。

2026-01-17 11:59:12 767

原创 x86_64 内核中 int3 中断(断点异常)的深度解析

它不仅是调试器(如 GDB、KGDB)实现断点的核心机制,也被内核自身的跟踪、探测框架(如 Kprobes)所使用。不仅是一个简单的调试断点,更是内核实现动态跟踪、实时补丁、深度调试等高级功能的基石。:这是处理“活内核补丁”(Live Kernel Patching)和动态代码的关键。汇编例程中,内核在切换到虚拟地址空间之前,会为早期的直接映射环境准备一个精简的 IDT。do_int3(regs)) // 处理内核态int3,若失败则宕机。可能来自内核调试、Kprobes,也可能是一个真正的内核 bug。

2026-01-10 12:54:59 938

原创 Linux系统调用深度解析:从syscall_init到futex实现

c/* 处理超时参数 */if (ret)return ret;tp = &t;/* 调用实际的处理函数 */硬件协同:充分利用x86-64架构的syscall指令和MSR寄存器分层设计:汇编入口 → C分发 → 具体实现 → 安全返回性能优化:使用SYSRET快速路径,同时保持IRET安全路径安全加固:包含分支预测控制、栈随机化、地址验证等机制向后兼容:支持32位应用程序通过兼容模式运行。

2026-01-09 09:37:26 768

原创 Redis网络层深度解析:数据如何写回客户端

分层抽象:通过函数指针实现连接类型的抽象,便于扩展流控机制:智能控制每次事件的最大写入量,保证公平性差异化处理:针对普通客户端、从节点、主节点采用不同策略线程安全:在多线程环境下正确处理资源竞争资源管理:及时清理已完成任务的连接性能优化:使用writev系统调用减少系统调用次数状态维护:准确记录客户端交互时间,支持超时检测这种设计使得Redis能够在高并发场景下高效、稳定地向客户端发送数据,同时保持良好的资源管理和错误恢复能力。通过事件驱动和函数指针的巧妙运用,Redis实现了高性能、可扩展的网络通信层。

2026-01-07 08:54:18 777

原创 Futex锁:从用户态到内核的深度解析

用户态优先:无竞争时完全在用户态操作内核兜底:竞争时通过系统调用高效等待/唤醒灵活扩展:支持多种同步原语(mutex、cond、rwlock等)理解futex的完整流程,从用户态API到内核实现,对于编写高性能多线程程序和调试复杂并发问题至关重要。futex的优雅设计展示了操作系统如何在性能和功能之间取得平衡,为用户态程序提供高效同步机制的同时,保持内核的简洁和高效。##源码if (ret)return ret;tp = &t;if (cmd!cmd!cmd!

2026-01-04 18:53:08 715

原创 Linux内核缺页异常处理深度解析

硬件协作:CPU提供CR2寄存器和错误码异常入口:通过IDT和idtentry机制捕获异常上下文切换:从用户态切换到内核态权限检查:多级安全检查确保系统安全内存管理:多级页表遍历和页面分配性能优化:快速路径、锁优化和预取策略整个处理流程体现了Linux内核在安全性、稳定性和性能之间的精细平衡。通过深入理解缺页异常处理机制,我们可以更好地理解虚拟内存管理的核心原理,并为系统调优和问题诊断提供坚实的基础。##源码/***//**/.endifREACHABLE.endm/***/

2026-01-04 18:51:41 1035

原创 从openjdk17 C++源码视角理解Java同步代码块底层实现原理:从字节码到锁膨胀

偏向锁(如果启用):首先尝试偏向当前线程轻量级锁:通过CAS在对象头中安装锁记录指针轻量级锁竞争:CAS失败时,检查是否为重入锁锁膨胀:创建或获取ObjectMonitor,修改对象头指向Monitor重量级锁:线程进入Monitor队列,可能经历自旋、park等状态这套复杂的锁机制体现了JVM在同步性能上的深度优化,通过在不同竞争情况下采用不同的锁策略,实现了高性能的线程同步。##源码//////// ..// ..// ...// 保存所有 caller-saved 寄存器。

2025-09-27 10:42:48 652

原创 OpenJDK 17 方法链接与同步方法入口点生成机制深度解析

OpenJDK 17 的方法链接机制通过以下步骤实现方法链接时检查方法的访问标志(根据标志确定对应的MethodKind在中将MethodKind转换为布尔参数最终传递给生成相应的同步或非同步代码这种设计确保了:同步方法有正确的锁机制非同步方法没有不必要的性能开销代码生成逻辑清晰可维护支持各种特殊方法类型的内在优化理解这一机制对于深入掌握 JVM 工作原理和进行性能优化具有重要意义。##源码//// YYY。

2025-09-27 10:11:20 1091

原创 深入解析HotSpot解释器方法调用机制:从invokevirtual到方法入口

字节码处理等字节码被解析,方法信息从常量池缓存中加载寄存器准备:方法指针存入rbx,接收者对象在栈上准备方法入口构建栈帧,初始化局部变量验证和准备:检查方法属性,处理同步等需求执行:通过解释器分派循环执行方法体的字节码这种设计保证了方法调用的高效性和灵活性,同时维护了Java语义的正确性。理解这一过程对于深入理解JVM内部机制和进行高性能Java程序优化至关重要。通过分析这些源码,我们不仅了解了方法调用的实现细节,也欣赏到了HotSpot虚拟机工程师在性能和安全之间取得的精巧平衡。

2025-09-20 19:00:21 839

原创 JVM方法调用机制深度解析:从aload_1到invokevirtual的完整旅程

局部变量访问优化aload_1等指令通过硬编码索引提高效率参数传递机制:参数按约定顺序排列在操作数栈上,通过地址计算直接访问虚方法分发:基于接收者对象的实际类型进行方法查找性能优化:通过内联缓存、方法内联等技术提升执行效率通过深入分析OpenJDK源码,我们不仅理解了JVM方法调用的内部机制,还能更好地理解Java程序的运行时行为,为性能优化和问题排查提供坚实基础。

2025-09-20 17:12:24 1005

原创 从iload_1 iload_2 iadd字节码角度看jvm字节码执行

ubuntu22 环境openjdk17。

2025-09-20 14:07:51 601

原创 Java 解释器分发表初始化与使用详解(基于 OpenJDK 17)

分发表是一个根据字节码值()快速跳转到对应处理代码地址的表。在解释执行过程中,解释器会根据当前字节码值,从分发表中查出对应的处理函数地址,并跳转执行。它本质上是一个以字节码为索引的函数指针表,如下图:分发表机制是解释器实现中提升执行效率的关键。OpenJDK 使用分发表将每条字节码快速映射到对应的执行入口。通过:初始化所有字节码入口根据 TOS 设置多种分发路径支持调试和异常字节码处理解释器得以在结构化和可扩展的框架下高效地处理 Java 字节码执行。##源码i++) {

2025-09-03 09:35:38 779

原创 OpenJDK 17 解释器分发表与安全点表机制解析

(正常分发表)和(安全点表)。这些表结构确保了字节码能够高效地在正常状态和安全点状态下执行。本文将深入分析这些数据结构的实现原理和工作机制。双表结构:正常表和安全点表分别处理普通执行和安全点状态下的字节码分发状态感知:每个字节码有多个入口点,适应不同的栈顶状态(TosState)模板化代码生成:通过 TemplateTable 为每个字节码生成优化的机器代码统一未实现处理:对未实现或非法字节码提供统一的错误处理机制。

2025-08-31 11:29:00 1044

原创 OpenJDK17调用机制深度解析:从Java调用到解释器入口概述

调用存根:处理Java和本地代码之间的转换,管理参数传递和结果返回Java调用机制:负责方法调用前的验证、编译和准备工作解释器入口:生成方法执行的入口代码,处理局部变量初始化同步方法返回:清理执行上下文,处理结果返回和异常情况##源码////// ...////// ...//#else#endif#endif__ enter();

2025-08-30 11:34:08 1025

原创 OpenJDK 17 安全点检查机制深入解析

安全点(Safepoint)是 Java 虚拟机中的一个重要概念,它是程序执行过程中的特殊位置,当所有线程都到达安全点时,JVM 才能执行一些需要暂停所有线程的操作,如垃圾回收、代码反优化、线程堆栈遍历等。状态转换检查:在线程状态转换时检查安全点本地轮询:每个线程有一个本地轮询字,定期检查全局安全点:当需要所有线程暂停时,设置全局安全点标志屏障等待:线程在安全点屏障处等待,直到安全点操作完成恢复执行:安全点操作完成后,所有线程恢复执行。

2025-08-23 09:51:34 1132

原创 OpenJDK 17的C1和C2编译器实现中,方法返回前插入安全点(Safepoint Poll)的机制

总结:C1/C2通过在方法返回指令前插入跳转到共享桩代码的指令,由桩代码触发VM的安全点检查机制。mov [r15_thread + saved_exception_pc], rscratch1 // 保存PC。// 跳转到VM的安全点处理例程。if (n->is_MachSafePoint()) { // 安全点节点(含返回前检查)// 计算安全点PC。// 发射安全点桩代码。lea rscratch1, [safepoint_pc] // 计算安全点PC。// 跳转到VM的安全点处理例程。

2025-08-16 18:47:46 1403

原创 Netty 的 Select/Poll 机制核心实现主要在 NioEventLoop 的事件循环

/ 按比例运行任务。// 移除 CONNECT 监听。// 阻塞式 Select。// EOF 关闭连接。// 显式置空加速 GC。// 处理 I/O 事件。// 重建 Selector。// 重置连续 Select 次数。// 处理读/接受连接事件。

2025-08-16 17:58:04 942

原创 Spring 和 Lettuce 源码分析 Redis 节点状态检查与失败重连的工作原理

关键步骤:Spring Boot 启动时创建根据配置类型(集群/哨兵/单机)初始化客户端对于集群模式:创建调用应用配置。

2025-08-16 12:25:02 1243

原创 OpenJDK 17 JIT编译器堆栈分析

当前操作:C2编译器线程正在为和等JVM核心操作生成本地代码存根。核心任务:在代码生成阶段()处理安全点轮询表,确保生成的本地代码能正确响应JVM安全点请求。背景目的:这些存根是JVM运行时的重要组成部分,用于优化高频操作(如锁、内存分配),提升Java程序性能。简单来说:这是JIT编译器的初始化阶段,正在为关键操作生成高效本地代码,并确保这些代码能与JVM的安全点机制协同工作。

2025-08-13 22:29:39 460

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除