<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[阿达King哥的博客]]></title><description><![CDATA[如何看透了生活的本质依然热爱生活]]></description><link>https://blog.csdn.net/JimFire</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; JimFire]]></copyright><item><title><![CDATA[9槽8极无刷电机霍尔测量机械角度精度只能是15°]]></title><link>https://blog.csdn.net/JimFire/article/details/166129503</link><guid>https://blog.csdn.net/JimFire/article/details/166129503</guid><author>JimFire</author><pubDate>Sun, 20 Sep 2026 14:04:52 +0800</pubDate><description><![CDATA[9槽8极无刷电机因有4对磁极，电角度与机械角度关系为θₘ = θₑ/4。三霍尔六步换相每步对应60°电角度，换算后机械角度精度仅为15°。由于霍尔仅能分辨6个状态，无法细分，故其测量机械角度的精度上限为15°，无法更高。]]></description><category></category></item><item><title><![CDATA[LIN总线]]></title><link>https://blog.csdn.net/JimFire/article/details/160419041</link><guid>https://blog.csdn.net/JimFire/article/details/160419041</guid><author>JimFire</author><pubDate>Wed, 22 Apr 2026 22:08:12 +0800</pubDate><description><![CDATA[LIN总线摘要 LIN（Local Interconnect Network）是一种低成本汽车总线，采用单线传输（12V电平），包含1个主节点和最多16个从节点。主要特点包括低速（1-20kbps）、短距离（≤40m）、支持2/4/8字节可变数据长度，采用主从轮询机制，无总线仲裁功能。典型应用于车窗、雨刮器等车身控制系统。 LIN报文包含同步间隔段（13+1个0）、同步段（0x55）、受保护ID段（6位ID+2位校验）及数据段。校验方式分为标准型（仅校验数据）和增强型（校验数据+PID）。帧类型包括无条件帧]]></description><category></category></item><item><title><![CDATA[无刷电机原理]]></title><link>https://blog.csdn.net/JimFire/article/details/160261745</link><guid>https://blog.csdn.net/JimFire/article/details/160261745</guid><author>JimFire</author><pubDate>Sat, 18 Apr 2026 00:20:48 +0800</pubDate><description><![CDATA[无刷电机通过电磁原理实现运转，其核心是利用电流产生的磁场与永磁体相互作用。定子线圈采用三相供电方式，通过控制器实现两相导通、一相悬空的换相控制，使转子持续旋转。控制器采用PWM技术调节电压占空比，从而控制电流大小和电机转速。相比有刷电机，无刷电机消除了电刷摩擦，提高了效率和寿命。整个系统由定子、转子和电子控制器三部分组成，通过精确的时序控制实现高效运转。]]></description><category></category></item><item><title><![CDATA[模板解释器]]></title><link>https://blog.csdn.net/JimFire/article/details/159987507</link><guid>https://blog.csdn.net/JimFire/article/details/159987507</guid><author>JimFire</author><pubDate>Thu, 09 Apr 2026 15:08:47 +0800</pubDate><description><![CDATA[模板解释器概述 模板解释器是JVM中用于提升字节码执行效率的一种技术。它通过预先为每个字节码指令定义汇编实现模板，并将这些模板存储在模板表中。每个模板包含标志位、输入/输出栈顶状态、生成函数指针等属性。在初始化阶段，模板表会为所有字节码指令注册对应的模板实现。执行时，解释器直接调用相应字节码的预生成汇编代码，避免了switch-case带来的性能损耗。这种设计显著提高了字节码解释执行的效率，是JVM解释器实现的关键优化手段。]]></description><category></category></item><item><title><![CDATA[解释器指令入口——栈顶缓存]]></title><link>https://blog.csdn.net/JimFire/article/details/159891572</link><guid>https://blog.csdn.net/JimFire/article/details/159891572</guid><author>JimFire</author><pubDate>Mon, 06 Apr 2026 18:00:59 +0800</pubDate><description><![CDATA[本文深入探讨了Java虚拟机中解释器指令执行的栈顶缓存机制。通过两个具体示例分析了栈顶状态对字节码执行的影响：当栈顶状态一致时直接更新寄存器，不一致时需进行压栈操作。文章详细介绍了HotSpot虚拟机如何通过模板表(TemplateTable)定义每个字节码的输入输出栈顶状态，并生成相应的汇编代码。栈顶缓存的本质是根据下一条指令的需求决定上一条指令结果存放位置（寄存器或内存），这种机制有效优化了解释器的执行效率。文章还通过NOP指令的极端案例展示了栈顶状态转换的实际应用。]]></description><category></category></item><item><title><![CDATA[解释器指令入口——转发表]]></title><link>https://blog.csdn.net/JimFire/article/details/159825443</link><guid>https://blog.csdn.net/JimFire/article/details/159825443</guid><author>JimFire</author><pubDate>Sat, 04 Apr 2026 12:30:46 +0800</pubDate><description><![CDATA[HotSpot JVM采用转发表机制高效执行字节码指令，避免分支判断导致的流水线冲刷。转发表是一个二维表，行表示栈顶状态（如int、long等），列表示256个字节码指令。每个单元格存储对应指令的汇编实现入口地址。JVM初始化时通过set_entry_points_for_all_bytes()填充转发表，将各字节码指令的实现地址按栈顶状态分类存储。执行时，JVM通过dispatch_next从转发表快速查找当前栈顶状态下的指令实现地址，直接跳转执行，充分利用CPU流水线机制提升性能。这种设计避免了传统的s]]></description><category></category></item><item><title><![CDATA[解释器函数栈原理（三）退出]]></title><link>https://blog.csdn.net/JimFire/article/details/159726191</link><guid>https://blog.csdn.net/JimFire/article/details/159726191</guid><author>JimFire</author><pubDate>Wed, 01 Apr 2026 13:15:08 +0800</pubDate><description><![CDATA[本文详细解析了Java虚拟机中函数退出的机制，重点分析了ireturn字节码的执行过程。文章首先展示了函数返回的字节码示例，指出ireturn负责函数退出操作。随后深入剖析了remove_activation函数的实现细节，包括如何通过寄存器操作恢复调用栈状态：1)将栈中保存的sender_sp值存入rbx；2)通过leave指令还原rbp和rsp；3)将返回地址存入rbcp寄存器。最后解释了jmp指令如何跳转回调用者继续执行。整个过程完整展现了Java函数调用栈的退出机制，对理解虚拟机工作原理具有重要意义]]></description><category></category></item><item><title><![CDATA[解释器函数栈原理(二)使用]]></title><link>https://blog.csdn.net/JimFire/article/details/159692150</link><guid>https://blog.csdn.net/JimFire/article/details/159692150</guid><author>JimFire</author><pubDate>Tue, 31 Mar 2026 17:13:40 +0800</pubDate><description><![CDATA[本文通过Java字节码示例详细讲解了解释器函数栈的工作原理。文章首先说明函数栈的高地址用于存储本地变量表（包含参数和成员变量），低地址用于操作数栈。以sum(i,j)方法为例，分析了其字节码执行过程：iload指令通过取负索引访问本地变量表，将变量值压入操作数栈；iadd指令完成栈顶两个元素的相加操作。最后指出本地变量表位于栈高地址端，操作数栈在低地址端，访问本地变量时需要将索引取负值进行偏移计算。整个过程清晰展示了函数栈的内存布局和字节码执行机制。]]></description><category></category></item><item><title><![CDATA[解释器函数栈原理(一) 建栈]]></title><link>https://blog.csdn.net/JimFire/article/details/159645383</link><guid>https://blog.csdn.net/JimFire/article/details/159645383</guid><author>JimFire</author><pubDate>Mon, 30 Mar 2026 12:39:42 +0800</pubDate><description><![CDATA[本文主要介绍了HotSpot虚拟机中解释器函数栈的构建原理，重点分析了generate_normal_entry函数的实现细节。文章首先说明了如何使用宏汇编定义各参数在内存中的位置，并解释了偏移量的确定方法。随后详细讲解了参数保存和局部变量处理的逻辑，包括参数个数的计算、本地变量表的初始化过程。最后阐述了Java函数栈的构建过程，包括返回地址和栈基地址的压栈操作，以及如何定位call_stub的栈顶位置。文章通过内存布局图和代码片段相结合的方式，清晰地展示了函数栈构建的关键步骤和实现原理。]]></description><category></category></item><item><title><![CDATA[解释器入口地址的生成]]></title><link>https://blog.csdn.net/JimFire/article/details/159574102</link><guid>https://blog.csdn.net/JimFire/article/details/159574102</guid><author>JimFire</author><pubDate>Sat, 28 Mar 2026 10:38:35 +0800</pubDate><description><![CDATA[解释器入口地址生成 通过分析HotSpot源码，可以得出以下结论： 解释器入口地址是通过AbstractInterpreterGenerator::generate_method_entry()函数生成的，该函数会根据方法类型创建对应的入口点。 对于普通Java方法，入口地址存储在Method::_i2i_entry字段中，这个字段在方法链接阶段被设置。 入口地址的生成过程涉及： 创建解释器代码段 生成特定方法的入口汇编代码 将入口地址与Java方法关联 关键代码路径： // 生成方法入口 address ]]></description><category></category></item><item><title><![CDATA[hotspot如何从C++逻辑跳入JVM逻辑]]></title><link>https://blog.csdn.net/JimFire/article/details/157331699</link><guid>https://blog.csdn.net/JimFire/article/details/157331699</guid><author>JimFire</author><pubDate>Sat, 24 Jan 2026 21:07:23 +0800</pubDate><description><![CDATA[本文分析了HotSpot JVM中call_stub的实现机制，重点解读了x86平台下生成汇编指令的过程。文章首先指出call_stub的实现在stubGenerator_x86_64.cpp文件中，通过StubCodeMark和碰撞指针方式分配内存。然后详细解释了如何通过C++代码生成汇编指令，包括Address类表示内存地址、寄存器操作等关键点。文章通过图示展示了参数在栈中的布局，并解析了宏汇编指令与真实汇编的对应关系。最后说明了如何保存调用函数的寄存器状态，为后续跳转JVM逻辑做准备。]]></description><category></category></item><item><title><![CDATA[hotspot桩代码]]></title><link>https://blog.csdn.net/JimFire/article/details/157299648</link><guid>https://blog.csdn.net/JimFire/article/details/157299648</guid><author>JimFire</author><pubDate>Fri, 23 Jan 2026 21:28:19 +0800</pubDate><description><![CDATA[摘要：桩代码是程序执行在不同例程间跳转时所需的过渡代码，用于处理运行环境转换和参数传递。HotSpot虚拟机中，桩代码通过定义入口地址实现跳转功能，平台相关的桩代码生成由汇编指令实现。以C++转入JVM为例，通过JavaCalls::call_helper调用桩代码完成环境切换，其中call_stub函数指针指向生成的汇编指令首地址，实现执行流程的平滑过渡。]]></description><category></category></item><item><title><![CDATA[hotspot中函数类]]></title><link>https://blog.csdn.net/JimFire/article/details/157263282</link><guid>https://blog.csdn.net/JimFire/article/details/157263282</guid><author>JimFire</author><pubDate>Thu, 22 Jan 2026 23:05:01 +0800</pubDate><description><![CDATA[文章摘要： 本文详细分析了Java函数在HotSpot虚拟机中的实现机制。首先介绍了Java字节码中函数描述的结构，包括访问标志、名称索引和描述符索引等。通过示例代码展示了Java函数编译后的字节码表示形式。重点解析了HotSpot中Method类的设计，说明其如何继承Metadata类并封装函数的关键属性如访问权限、函数名和参数表。文章还提供了使用gdb调试Java类加载过程的方法，帮助读者深入理解函数在虚拟机内部的解析和存储机制。最后通过调试会话展示了具体函数解析时的内存状态。]]></description><category></category></item><item><title><![CDATA[hotspot中的Java类对象如何保存虚函数]]></title><link>https://blog.csdn.net/JimFire/article/details/157097598</link><guid>https://blog.csdn.net/JimFire/article/details/157097598</guid><author>JimFire</author><pubDate>Sun, 18 Jan 2026 14:24:49 +0800</pubDate><description><![CDATA[本文分析了HotSpot虚拟机中Java类对象的虚函数保存机制。Java中可被继承的非静态、非私有、非final方法被视为虚函数，通过invokevirtual字节码调用。HotSpot使用Klass类的vtable字段存储虚函数，其中包含虚函数表长度和方法指针。通过调试Object类发现，其5个方法（hashCode、equals、clone、toString、finalize）属于虚函数，而final修饰的方法则不是。虚函数表内存布局从Klass对象起始地址偏移固定位置开始，按顺序存放各虚函数的方法指针]]></description><category></category></item><item><title><![CDATA[hotspot中的Java类对象如何保存注解]]></title><link>https://blog.csdn.net/JimFire/article/details/157094526</link><guid>https://blog.csdn.net/JimFire/article/details/157094526</guid><author>JimFire</author><pubDate>Sun, 18 Jan 2026 10:10:13 +0800</pubDate><description><![CDATA[摘要：HotSpot虚拟机通过Annotations类保存Java类对象的注解信息，包括类注解(_class_annotations)、字段注解(_fields_annotations)及其类型注解(_class_type_annotations/_fields_type_annotations)。注解在字节码解析阶段被提取，其中类注解作用于类声明，类型注解作用于泛型等类型声明。InstanceKlass类通过_annotations字段维护所有注解信息，支持运行时通过反射获取。这种机制实现了JDK5.0引]]></description><category></category></item><item><title><![CDATA[类加载器分析（五）启动类加载器 之 关于如何取出字段泛型数据类型定义]]></title><link>https://blog.csdn.net/JimFire/article/details/157066405</link><guid>https://blog.csdn.net/JimFire/article/details/157066405</guid><author>JimFire</author><pubDate>Sat, 17 Jan 2026 17:53:32 +0800</pubDate><description><![CDATA[摘要：本文分析了HotSpot虚拟机中字段泛型签名的存储结构。当类字段包含泛型类型时，泛型签名索引(generic_signature_index)会被集中存储在字段数组末尾。通过FieldStreamBase类的算法，首先计算_generic_signature_slot起始位置，再通过遍历字段判断泛型标志位，最终定位到具体的泛型签名索引。当访问下一个泛型字段时，只需将_generic_signature_slot递增1即可。该设计有效解决了泛型签名索引与字段的对应关系问题，保证了泛型信息的准确获取。]]></description><category></category></item><item><title><![CDATA[类加载器分析（四）启动类加载器 之 字段]]></title><link>https://blog.csdn.net/JimFire/article/details/157024826</link><guid>https://blog.csdn.net/JimFire/article/details/157024826</guid><author>JimFire</author><pubDate>Fri, 16 Jan 2026 13:56:03 +0800</pubDate><description><![CDATA[本文分析了Java类加载过程中字段信息的处理机制。通过String类的示例展示了字段的获取方式，包括字段名称、类型、修饰符等信息。重点探讨了HotSpot虚拟机中InstanceKlass类的_fields和_java_fields_count成员变量如何存储字段信息，并追踪了字段获取的时机——在字节码解析阶段完成。具体实现上，ClassFileParser类在解析字节码后会将其_fields和_java_fields_count赋值给InstanceKlass类，从而完成字段信息的加载。文章结合代码示例和]]></description><category></category></item><item><title><![CDATA[启动类加载器（一）名称，接口，父类]]></title><link>https://blog.csdn.net/JimFire/article/details/156983283</link><guid>https://blog.csdn.net/JimFire/article/details/156983283</guid><author>JimFire</author><pubDate>Thu, 15 Jan 2026 12:14:52 +0800</pubDate><description><![CDATA[摘要：本文分析了Java虚拟机中的启动类加载器（Bootstrap Class Loader）的工作原理。启动类加载器使用C++实现，负责加载JVM基础类如Object和String。通过调试分析发现，Klass类描述Java类元信息，InstanceKlass继承Klass并包含具体类信息。文中展示了gdb调试过程，验证了String类加载时正确识别其实现的5个接口（Serializable、Comparable等）。调试结果表明启动类加载器能准确加载基础类及其接口信息。]]></description><category></category></item><item><title><![CDATA[类加载器分析（二）类加载器中的Module]]></title><link>https://blog.csdn.net/JimFire/article/details/156830341</link><guid>https://blog.csdn.net/JimFire/article/details/156830341</guid><author>JimFire</author><pubDate>Sun, 11 Jan 2026 15:45:19 +0800</pubDate><description><![CDATA[本文介绍了Java 9引入的模块系统(Module)及其与类加载器的关系。模块是Java 9的新特性，通过module-info.java文件定义模块依赖和访问控制。在类加载过程中，加载器会优先判断类是否属于某个模块，若属于则调用对应模块的加载器。Module类包含模块名称、类加载器引用和模块描述器(ModuleDescriptor)，后者记录模块的依赖、导出包等信息。文章还通过类图展示了模块描述器的结构，并说明了类加载时模块的优先级判断流程。]]></description><category></category></item><item><title><![CDATA[Java模块化之旅]]></title><link>https://blog.csdn.net/JimFire/article/details/156805781</link><guid>https://blog.csdn.net/JimFire/article/details/156805781</guid><author>JimFire</author><pubDate>Sat, 10 Jan 2026 19:49:35 +0800</pubDate><description><![CDATA[Java 9模块化系统(JPMS)是Java平台的重要革新，它通过模块描述文件(module-info.java)实现了代码的强封装和更好的组织管理。本文全面介绍了模块的概念、结构(包含包、资源和描述文件)以及四种模块类型。重点解析了10种模块指令的用法，包括依赖声明(requires)、API导出(exports)、服务提供(provides...with)和反射控制(opens)等。同时介绍了默认模块分类和命令行操作，帮助开发者理解如何将现有项目迁移到模块化架构。通过模块化，Java应用可以获得更好的封]]></description><category></category></item></channel></rss>