自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 揭秘OpenJDK 17字节码解释引擎:模板解释器深度解析

OpenJDK 17的模板解释器通过预编译+直接分派的核心设计,在解释执行和编译执行间架起高效桥梁。这种"用空间换时间"的策略,使Java在启动速度和长期运行性能间取得精妙平衡,奠定了现代JVM高效执行的基础。随着Java虚拟线程等新技术的发展,解释器作为执行引擎基石的角色将更加重要。##源码assert(!#endif。

2025-06-10 22:05:00 1003

原创 Jedis集群管理:深入解析槽位信息的获取与动态更新机制

​。

2025-06-07 10:53:00 451

原创 剖析 Spring 中 @ResponseBody 原理与 Tomcat NIO 写事件(SelectionKey.OP_WRITE)的协作机制

的核心原理是利用 Spring MVC 的消息转换机制,将方法返回值转化为字节流并写入响应缓冲区,而实际的网络发送则由 Tomcat 的 NIO 模块通过事件驱动的方式完成。当套接字暂不可写时,Tomcat 会通过注册事件实现非阻塞等待,这种机制充分发挥了 NIO 的优势,能够高效地处理高并发场景下的写操作。通过深入理解这一流程,开发者可以更好地优化响应体的转换逻辑(如选择更高效的消息转换器),同时也能针对网络延迟、缓冲区设置等问题进行性能调优。##源码try {while (!

2025-05-24 11:17:38 921 1

原创 jvm安全点(五)openjdk17 c++源码垃圾回收之安全点阻塞状态线程在安全点同步中无需调用block函数的详细流程解析

/ 标记线程为安全点安全。// 标记线程为安全。// 从链表中移除该线程,减少still_running计数。// 阻塞状态的线程直接视为安全。

2025-05-22 08:45:23 704

原创 jvm安全点(四)openjdk17 c++源码垃圾回收之安全点轮询页内存设置不可访问

轮询页的不可访问性是在 ​。

2025-05-18 08:27:59 274

原创 jvm安全点(三)openjdk17 c++源码垃圾回收之安全点结束,唤醒线程

机制高效地管理线程的阻塞与唤醒。​,通过操作系统提供的。

2025-05-17 21:57:09 680

原创 jvm安全点(一)openjdk17 c++源码垃圾回收安全点信号函数处理线程阻塞

信号处理流程最终通过以下路径调用。

2025-05-17 21:43:54 685

原创 jvm安全点(二)openjdk17 c++源码垃圾回收安全点信号函数处理线程阻塞

【代码】jvm安全点(二)openjdk17 c++源码垃圾回收安全点信号函数处理线程阻塞。

2025-05-17 21:36:57 754

原创 线程(二)OpenJDK 17 中线程启动的完整流程用C++ 源码详解之主-子线程通信机制

同步的本质:主线程与子线程通过Monitor的等待-通知模型实现状态同步。性能优化避免了安全点开销,提高线程创建效率。资源管理:JVM严格处理线程创建失败场景,防止内存泄漏。通过分析OpenJDK源码,我们不仅理解了Java线程的创建机制,更看到JVM如何通过精巧的同步设计,在复杂性与性能之间取得平衡。##源码= NULL) {} else {= NULL) {");

2025-05-17 10:51:35 910

原创 Java 直接内存ByteBuffer.allocateDirect原理与源码解析

Java直接内存通过JNI桥接,由JVM调用系统API分配本地内存,结合配额管理、页对齐优化及Cleaner自动释放机制,实现了高效、安全的内存管理。##源码。

2025-05-14 19:51:25 779

原创 深入解析JVM字节码解释器执行流程(OpenJDK 17源码实现)

JVM解释器的核心任务是将Java字节码逐条翻译为本地机器指令并执行。其执行流程可分为以下关键阶段:方法调用入口构建:生成栈帧、处理参数、同步锁等。字节码分派(Dispatch):根据字节码跳转到对应处理逻辑。操作数栈与局部变量管理:维护方法执行上下文。方法返回与栈帧销毁:处理返回值、恢复调用者栈帧。以下结合OpenJDK 17源码详细分析各环节实现。这是从本地代码(如JNI)调用Java方法的核心入口,负责设置调用环境:address generate_call_stub(address& re

2025-05-14 14:15:00 736

原创 线程(一)OpenJDK 17 中线程启动的完整流程用C++ 源码详解

这一流程涵盖了从操作系统线程创建到执行 Java 代码的全链路,涉及 JVM 内部状态管理、同步机制、性能优化及跨层级调用,是 JVM 线程模型的核心实现。

2025-05-13 16:20:51 702

原创 OpenJDK21源码编译指南(Linux环境)

-with-num-cores=12 \ # 根据CPU核心数调整。--with-memory-size=20480 \ # 内存分配(单位MB)--with-boot-jdk=/opt/jdk-20 \ # 指向JDK20路径。--disable-warnings-as-errors # 忽略警告错误。--with-debug-level=slowdebug \ # 调试模式。查找对应开发包并安装。

2025-05-06 18:51:09 906

原创 MySQL 8.4.5 源码编译安装指南

对于需要自定义编译选项或深度优化数据库性能的场景,源码编译安装是更好的选择。本文将详细介绍如何从源码编译并安装 MySQL 8.4.5,并提供完整的配置与初始化流程。通过上述步骤,您已成功完成 MySQL 8.4.5 的源码编译安装。此方法支持深度定制化配置,适合对数据库有特殊需求的场景。如果在操作中遇到问题,请优先检查日志文件。: root 或具有 sudo 权限的用户。: 指定 Boost 库路径(自动下载): 建议预留至少 5GB 空间。,并根据错误提示调整配置。: 数据库文件存储路径。

2025-05-06 11:00:46 933

原创 Field访问对象int字段,对象访问int字段,通过openjdk17 C++源码看对象字段访问原理

通过反射访问int计算偏移量:反射初始化阶段通过slot从类元数据获取字段偏移量。内存访问:调用直接读取对象内存。字节码执行:解释器/即时编译器使用相同机制访问字段。均依赖预先计算的字段偏移量直接操作内存。理解这一过程有助于优化反射性能,并为分析JVM内存模型提供基础。openjdk17源码elseC++代码= 0);

2025-04-28 21:05:57 1001

原创 Java方法执行机制与入口点实现深度解析

/ 生成同步方法入口。java_lang_math_sin, // Math.sin()等固有方法。

2025-04-28 18:51:56 495

原创 MyBatis 拦截器链执行顺序及原理深度解析:揭开动态代理背后的奥秘

MyBatis 拦截器链(Interceptor Chain)是 MyBatis 提供的一种扩展机制,允许开发者在 SQL 执行的关键环节​(如执行查询、更新操作)插入自定义逻辑。它类似于给 SQL 执行流程安装的“可编程插件”,能够在不修改框架源码的情况下,实现日志记录、数据加密、分页处理等高级功能。MyBatis 拦截器链通过动态代理和责任链模式的巧妙结合,实现了高度灵活的功能扩展。优势说明非侵入式扩展无需修改框架源码灵活的执行顺序控制通过配置顺序控制代理层级细粒度的拦截范围。

2025-03-05 19:18:52 475

原创 MySQL 8 C++ 源码解析:EXPLAIN 实现机制

MySQL 的EXPLAIN实现通过多层模块协作完成,从命令解析到优化器决策,最终生成用户可读的执行计划。其源码设计兼顾灵活性与性能,支持多种输出格式和复杂查询场景。理解这一机制,有助于深入掌握 MySQL 的查询优化逻辑,并为性能调优提供底层支持。

2025-03-03 17:41:18 751

原创 深入解析ClientPreparedStatement:Java端与MySQL8源码的协作

在数据库开发中,预处理语句()是防止SQL注入、提升性能的利器。然而,并非所有场景都适合使用服务器端预处理。当配置时,JDBC驱动会退化为,直接将参数拼接到SQL中执行。本文将从和双重视角,解析这一机制的工作原理、性能影响及适用场景。

2025-03-02 07:07:54 733

原创 从Java到MySQL8源码:深入解析PreparedStatement参数绑定与执行机制

通过深入Java与MySQL源码,我们揭示了从参数绑定到执行的全链路过程。这种底层视角不仅帮助开发者优化数据库操作,还能更好地应对高并发场景下的性能挑战。正确使用预处理语句,是编写高效、安全数据库应用的关键一步。##java调用栈##java堆栈##mysql8源码 mysqld_stmt_prepare方法gdb堆栈(gdb) bt##mysql8源码 mysqld_stmt_execute 方法gdb堆栈)"(gdb) bt。

2025-03-01 18:00:10 1209

原创 深入解析 MySQL 中的时间函数:NOW() 与 SYSDATE() 的奥秘

尝试在事务中混用。

2025-03-01 08:19:30 1477

原创 Spring AOP切面失效问题解析:Controller内部方法调用如何拦截?

随着Spring 6/Spring Boot 3对AOT(Ahead-Of-Time)编译的支持,未来可能出现更优雅的解决方案。但在当前技术体系下,合理选择本文提供的方案,即可有效应对Controller内部方法调用的切面拦截难题。,将业务逻辑合理拆分到Service层,既能规避代理限制,又能提升代码可维护性。对于遗留系统,AspectJ方案提供了更强大的拦截能力,但需要权衡字节码增强带来的复杂性。本文将深入剖析这一问题的根源,并提供多种实用解决方案,帮助开发者绕过这一“代理陷阱”。

2025-02-26 16:08:47 703

原创 深入理解 MySQL 8 C++ 源码:SELECT MOD(MONTH(NOW()), 2) 的函数执行过程

NOW()函数的实现声明文件(或其派生类实现文件核心方法负责获取当前时间。通过分析内置函数的实现:通过类封装逻辑。表达式求值:递归调用val_int()或方法。源码结构:时间函数在,数学函数在。掌握这些底层细节,不仅能帮助开发者调试复杂 SQL,还能为贡献 MySQL 源码或定制内置函数奠定基础。##MOD函数##MONTH函数。

2025-02-20 22:59:54 1151

原创 深入解析 MySQL 8 C++ 源码:二级索引回表操作

在 InnoDB 中,表的数据是按照聚簇索引(主键索引)组织的,这意味着每行数据都存储在聚簇索引的叶子节点中。而二级索引则只包含索引列和对应的主键值。当查询涉及二级索引时,InnoDB 可以通过二级索引快速定位到主键值,但为了获取完整的行数据,还需要通过主键值回表到聚簇索引中。例如,假设有一个表t,主键为id,并有一个二级索引idx_namesql复制age INT,当执行以下查询时:sql复制InnoDB 首先会通过二级索引idx_name查找到满足条件的记录,获取其主键值id。

2025-02-19 14:15:56 953

原创 java.lang.IllegalArgumentException: 在请求目标中找到无效字符。有效字符在RFC 7230和RFC 3986中定义

在开发和生产环境中,出于安全和隐私的考虑,我们可能不希望将详细的错误信息暴露给用户。Tomcat 提供了一种机制,允许我们通过配置来控制错误报告的显示。本文将详细介绍如何在 Tomcat 的server.xml文件中配置,以屏蔽错误报告和服务器信息。

2025-02-14 18:45:21 943

原创 mysql8 从C++源码角度看sql生成抽象语法树

词法分析:在my_sql_parser_parse内部,首先会使用MYSQL_LEX对象对输入的SQL字符串进行词法分析,将SQL文本分割成一系列标记(tokens)。MySQL 8的C++源码中,SQL语句的词法分析和语法分析是通过一个复杂的解析器实现的,这个解析器将输入的SQL文本转换成抽象语法树(AST)。具体的词法分析是由MYSQL_LEX类完成的,而语法分析则是由Bison生成的解析器根据.y文件(例如sql_yacc.yy)中的规则来处理的。AST是一种树形结构,用于表示源代码的逻辑结构。

2025-02-08 18:50:02 1259

原创 mysql8 用C++源码角度看客户端发起sql网络请求,并处理sql命令

MySQL 8 的 C++ 源码中,处理网络请求和 SQL 命令的流程涉及多个函数和类。

2025-02-08 15:50:30 578

原创 mysql8 sql语法错误,错误信息是怎么通过网络发送给客户端的,C++源码展示

【代码】mysql8 sql语法错误,错误信息是怎么通过网络发送给客户端的,C++源码展示。

2025-02-07 18:46:15 299

原创 mysql8 C++源码中创建表函数,表字段最大数量限制,表行最大存储限制

MAX_FIELDS的定义通常在 MySQL 的头文件中,例如或其他相关头文件。在 MySQL 8 中,MAX_FIELDS的值为4096。最大字段数量:MySQL 8 中表的最大字段数量为4096。代码中的体现:在函数中通过MAX_FIELDS宏检查表的字段数量。MySQL 中,每行记录的最大长度限制为65,535 字节。这个限制是由 MySQL 的内部实现决定的,而不是由某个特定的源码文件或函数直接定义的。这个限制适用于所有存储引擎,包括 InnoDB 和 MyISAM。

2025-02-07 18:36:23 437

原创 mysql8 C++源码中创建表函数,表字段最大数量限制,表行最大存储限制

MAX_FIELDS的定义通常在 MySQL 的头文件中,例如或其他相关头文件。在 MySQL 8 中,MAX_FIELDS的值为4096。最大字段数量:MySQL 8 中表的最大字段数量为4096。代码中的体现:在函数中通过MAX_FIELDS宏检查表的字段数量。MySQL 中,每行记录的最大长度限制为65,535 字节。这个限制是由 MySQL 的内部实现决定的,而不是由某个特定的源码文件或函数直接定义的。这个限制适用于所有存储引擎,包括 InnoDB 和 MyISAM。

2025-02-07 18:33:24 494

原创 用JAVA 源码角度看 客户端请求服务器流程中地址是域名情况下解析域名流程

Java 客户端请求流程中解析域名的过程涉及多个层次的处理,从类的高层方法到底层的系统调用。通过缓存、代理选择和权限检查等机制,Java 能够灵活地处理各种网络环境下的域名解析和连接请求。这个过程确保了客户端能够高效、安全地与远程服务器进行通信。##实验代码try {// 创建URL对象// 打开连接// 设置请求方法为GET// 设置超时时间// 获取响应码// 如果响应成功,则读取响应内容。

2025-01-07 22:20:40 677

原创 修改openjdk17源码,手搓native方法调用java method方法(无参,无返回值)

修改openjdk17源码,jvm.cpp新增一个native方法,传入对象和要被调用的方法(无参,无返回值)void。

2025-01-04 10:17:27 928

原创 java class类对象 加载时机

总结来说,类的加载时机是在程序第一次主动使用类时触发的,而类的实例化是在代码中显式创建对象时发生的。类加载是一个自动的过程,由 Java 虚拟机控制,而实例化则是由程序员的代码控制的。在 Java 中,类对象的加载时机通常指的是类加载机制中的“加载”阶段,而实例化则是指创建类的实例对象的过程。java class类对象 是在什么时候被加载的?

2025-01-02 22:02:40 539

原创 mysql8 从C++源码角度看 客户端发送的sql信息 mysql服务端从网络读取到buff缓存中

这段代码主要负责从网络读取数据包,它包含了多个函数来处理网络数据的读取、缓冲区管理、包的解压缩、重试机制和超时处理等。函数: 该函数是 MySQL 网络协议栈的一个核心函数,用于从网络上读取一个数据包。它处理了数据包头的读取、压缩包的处理、包的重新分配和数据的实际读取。读取包头,获取包的长度。如果包是压缩的,则解压缩并更新complen(解压后的包长度)。检查是否需要扩展缓冲区来适应包的内容。最终调用读取实际的包数据。函数: 这个函数是读取原始数据的实际工作函数,它通过vio_read。

2024-12-31 22:43:35 1360

原创 mysql8 从C++源码角度看 Statement cancelled due to timeout or client request异常

这个类的主要目的是在查询超时时提供一个机制来取消正在执行的 SQL 查询。这是 JDBC 驱动程序中的一个高级特性,允许应用程序在查询执行时间过长时中断查询,以避免资源长时间占用。这种机制对于需要处理大量数据或执行复杂查询的应用程序尤其重要,因为它可以帮助提高应用程序的响应性和资源利用率。这个类是 JDBC 驱动程序的一部分,用于处理查询超时的情况。这个方法是线程间通信的一种方式,用于安全地中断另一个线程的执行。命令的核心部分,允许管理员或有权限的用户终止长时间运行的查询或释放资源。)还是关闭整个连接(

2024-12-31 21:41:36 492

原创 Druid连接池管理连接池中的空闲连接驱逐流程

通过以上步骤,Druid连接池能够有效地管理空闲连接,确保连接池的健康和高效运行。

2024-12-28 22:38:03 390

原创 mysql8 Too many connections 失败原因从mysql8 C++源码角度分析

在。

2024-12-28 12:32:51 591

原创 java native isInstance方法在c++源码中对应的方法,是怎么比对,对象是不是这个class的

Java 的。

2024-12-26 09:36:57 263

原创 openjdk17 中 klass 数组 在元空间内存分配

【代码】klass 数组 内存空间分配。

2024-12-25 19:06:29 169

原创 openjdk17 从C++源码视角看 ArrayList对象在内存中占用24个字节

代码展示了如何从线程本地分配缓冲区中分配内存。在这个例子中,请求分配的大小为 3 个HeapWord,即 24 字节。这种分配方式是为了减少分配时的锁争用,提高内存分配效率。这段代码是在 TLAB 上分配了 24 字节的内存。这种分配是在 Java 堆上进行的,而不是在栈上。TLAB 是 Java 堆的一部分,用于提高对象分配的效率。##C++源码if (result!return obj;

2024-12-22 16:28:07 350

空空如也

空空如也

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

TA关注的人

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