乐于分享
好东西不私藏

源码编译JDK与HSDIS:尝试探索Java JIT汇编分析

源码编译JDK与HSDIS:尝试探索Java JIT汇编分析

一、背景

1.1 Netty AsciiString的性能回归

最近看Netty的提交,发现一个蛮有意思的提交(#17074),

提案的经过是这样的:

  1. #13749 报告了AsciiString.cached(String)的一个bug:该方法没有对输入进行Latin-1清洗,导致缓存的String与byte内容不一致。

  2. #17007 修复了这个bug,但引入了性能回归。修复后的实现对输入字符串进行了两次扫描

    • 第一次:new AsciiString(string)通过c2b(...)将char数组复制到byte数组;
    • 第二次:AsciiString.cached(String)再次扫描检查是否有非Latin-1字符。
  3. #17074 的提交者 dreamlike-ocean通过查看JIT汇编发现了问题的根源。他在PR中附上了两份PrintAssembly的输出:

    • jit-actual-old-c2-ascii-final.txt:旧版本的汇编,包含两个独立的循环;
    • jit-actual-new-c2-ascii-final.txt:优化后的汇编,只有一个循环。

汇编输出清楚地表明:C2编译器没有自动合并这两个循环(Loop Fusion)。旧版本在AsciiString.cached中仍然保留了第二个扫描循环,而优化版本将c2b(...)转换和Latin-1检查合并到了一个循环中。

1.2 为什么汇编能揭示问题?

这个案例中,单纯观察源码其实也能发现潜在的问题。但通过汇编进行分析,确实会更加准确。汇编分析的价值在于:

  1. 验证假设:源码看起来是两次扫描,但JIT编译器可能会自动优化(如Loop Fusion)。汇编能告诉你编译器实际做了什么
  2. 量化影响:汇编能直观展示循环结构、指令数量、向量化程度,帮助评估性能影响。
  3. 通用方法:不是所有性能问题都能从源码直接看出。对于内联决策、锁消除、向量化等深层优化,汇编是唯一的可靠证据。

此前,我仅在编写C++/Rust代码时尝试过通过汇编分析性能。编写Java应用代码,最多也就是借助JMH进行基准测试。这个案例激发了我探索JVM汇编优化的兴趣。

不过,当我尝试直接使用JDK打印汇编代码时,发现了问题——需要借助HSDIS插件,才能完成从Java源码到汇编输出的完整链路。

我们日常编写的Java代码会被JVM的JIT(Just-In-Time)编译器转化为机器码执行,要让JVM输出汇编,需要一个关键组件:HSDIS(HotSpot Disassembler)。这个库在大多数JDK发行版中并不自带,需要我们自己编译安装。

本文将记录从源码编译JDK和HSDIS,打通从Java源码到汇编输出的完整链路。

二、HSDIS 是什么

2.1 官方定义

根据OpenJDK Wiki(HotSpot/PrintAssembly)的描述:

HSDIS是HotSpot的一个插件,用于将动态生成的代码反汇编为可读的汇编指令。它实现了PrintAssembly选项所要求的接口协议。

简单来说,JVM的JIT编译器生成的是原生机器码(二进制),而HSDIS是一个反汇编器插件,它调用底层的反汇编引擎(如Capstone、LLVM或GNU Binutils),将这些机器码翻译成人类可读的汇编文本。

2.2 为什么需要它

JVM本身只生成机器码,不会直接输出可读的汇编文本。当你使用-XX:+PrintAssembly参数时,JVM会查找HSDIS库,如果找不到就会报错:

Loading hsdis library failed

没有HSDIS,PrintAssembly就无法生效。

2.3 HSDIS的独立化演进

在JDK 16之前,HSDIS的源码位于HotSpot仓库内部(hotspot/src/share/tools/hsdis/),与JVM源码紧密耦合。

从JDK 17开始,HSDIS被重构并独立到了JDK源码树的 src/utils/hsdis/ 目录下。根据其README 的说明:

The files in this directory are built independently of the HotSpot JVM.

hsdis is an interface exposed by Hotspot. There are several backends that implement this interface, using different disassembly engines. Included in the JDK is support for building hsdis with Capstone, LLVM or GNU binutils. The interface is fairly straightforward and easy to implement using other backends.

关键变化:

  • HSDIS现在是一个独立构建的组件,不再需要重新编译整个JVM;
  • 支持三种后端引擎:Capstone、LLVM、GNU Binutils;
  • 通过configure --with-hsdis=<backend>选择后端;
  • 使用make build-hsdis单独构建,make install-hsdis安装到JDK。

2.4 三种后端对比

后端
特点
安装方式
Capstone
轻量级,推荐首选
sudo apt install libcapstone-dev
LLVM
功能强大,体积较大
sudo apt install llvm
GNU Binutils
传统方案,有许可证风险(GPLv3)
需要下载源码编译

这里因为仅仅只是探索,所以选择使用Capstone(安装简单,依赖少,且无许可证问题)。

三、环境准备

为什么选择WSL?

在Windows下编译JDK和HSDIS是一件比较麻烦的事情:

  1. 依赖工具链复杂:需要安装Visual Studio、Cygwin或MSYS2等工具,配置过程繁琐;
  2. 编译脚本兼容性问题:JDK的构建脚本主要针对Linux/macOS优化,Windows下经常遇到路径、换行符等兼容性问题;
  3. HSDIS编译更困难:HSDIS需要链接底层反汇编引擎(如Capstone),在 Windows下找到合适的预编译库并不容易。

相比之下,在WSL (Windows Subsystem for Linux) 下编译就简单得多:

  • 完整的Linux工具链(gcc、make、autoconf 等)开箱即用;
  • 包管理器(apt)可以一键安装依赖;
  • JDK 构建脚本在Linux下经过充分测试,稳定性有保障。

本文以WSL (Ubuntu) + JDK 25为例

3.1 安装基础依赖

sudo apt updatesudo apt install -y build-essential autoconf git zip unzip \    libcapstone-dev pkg-config

3.2 安装 Bootstrap JDK

编译JDK需要一个已有的JDK作为引导(boot JDK),版本要求通常为N或N-1:

sudo apt install -y openjdk-25-jdk# 验证java -version# openjdk version "25.0.3" 2026-04-21

四、编译JDK(含 HSDIS)

4.1 获取源码

mkdir -p ~/jdk-build && cd ~/jdk-build# 克隆 JDK 25 源码(以 tag jdk-25+36 为例)git clone --depth 1 --branch jdk-25+36 \    https://github.com/openjdk/jdk.git jdk-jdk-25-36cd jdk-jdk-25-36

4.2 配置构建

bash configure \    --with-hsdis=capstone \    --with-capstone=/usr \    --with-debug-level=release \    --disable-warnings-as-errors \    --with-boot-jdk=/usr/lib/jvm/java-25-openjdk-amd64

参数说明:

参数
含义
--with-hsdis=capstone
使用 Capstone 作为 HSDIS 后端
--with-capstone=/usr
Capstone 安装路径(apt 安装通常在 /usr)
--with-debug-level=release
Release 构建,性能最优
--disable-warnings-as-errors
避免编译警告导致失败
--with-boot-jdk=...
指定引导 JDK 路径

配置成功后会看到类似输出:

checking what hsdis backend to use... 'capstone'checking for capstone... /usr

4.3 编译

# 编译整个JDK(含HSDIS)make images JOBS=$(nproc)# 如果只想单独编译HSDISmake build-hsdis

4.4 验证HSDIS

编译完成后,HSDIS库位于:

build/linux-x86_64-server-release/jdk/lib/hsdis-amd64.so

验证是否可用:

build/linux-x86_64-server-release/images/jdk/bin/java \    -XX:+UnlockDiagnosticVMOptions \    -XX:+PrintAssembly \    -version

如果输出汇编代码(而不是Loading hsdis library failed),说明HSDIS已生效。

4.5 安装到系统JDK

如果不想使用编译出的JDK,可以将HSDIS复制到系统JDK的lib目录:

sudo cp build/linux-x86_64-server-release/jdk/lib/hsdis-amd64.so \    /usr/lib/jvm/java-25-openjdk-amd64/lib/# 验证java -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly -version

五、HSDIS的接口协议

HSDIS的核心接口非常简洁,定义在hsdis.h中:

/* decode_instructions -- dump a range of addresses as native instructions   This implements the protocol required by the HotSpot PrintAssembly option.   The start_va, end_va is the virtual address the region of memory to   disassemble and buffer contains the instructions to decode.   The option string, if not empty, is interpreted by the disassembler implementation.   The printf callback is 'fprintf' or any other workalike.   It is called as (*printf_callback)(printf_stream, "some format...", some, format, args).   The event callback receives an event tag (a string) and an argument (a void*).*/voiddecode_instructions(void* start_va, void* end_va,                         decode_func_printf_callback printf_callback,void* printf_stream,                         decode_func_event_callback event_callback,void* event_stream,constchar* options);

JVM调用这个函数,传入一段内存地址范围(即JIT生成的机器码),HSDIS通过回调函数输出反汇编结果。这就是为什么切换后端(Capstone/LLVM/Binutils)只需替换一个.so文件——接口是统一的。

六、常用JVM诊断参数

HSDIS安装好后,配合以下JVM参数使用:

java -XX:+UnlockDiagnosticVMOptions \     -XX:+PrintAssembly \     -XX:+PrintInlining \     -XX:+PrintCompilation \     -XX:CompileCommand=print,com/example/MyClass.myMethod \     -jar app.jar
参数
作用
-XX:+UnlockDiagnosticVMOptions
解锁诊断选项(必须放在最前面)
-XX:+PrintAssembly
输出 JIT 生成的汇编代码
-XX:+PrintInlining
打印方法内联决策
-XX:+PrintCompilation
打印编译任务
-XX:CompileCommand=print,<method>
只打印指定方法的汇编
-XX:CompileCommand=dontinline,<method>
禁止指定方法被内联

七、常见问题

7.1 编译时找不到Capstone

configure: error: Could not find capstone

确保安装了libcapstone-dev(注意是-dev包,不是运行时包)。

7.2 HSDIS加载成功但没有汇编输出

可能是方法还没有被JIT编译。尝试:

  • 增加预热次数(-Xcomp 强制编译,但不推荐用于性能测试);
  • 使用-XX:+PrintCompilation确认方法是否被编译.

7.3 能否在生产环境使用HSDIS?

不推荐。HSDIS是诊断工具,PrintAssembly会显著影响启动时间和运行性能。仅在开发/测试环境使用。

八、总结

  • HSDIS是JVM PrintAssembly功能的反汇编插件
  • 从JDK 17开始独立构建,支持 Capstone/LLVM/Binutils三种后端;
  • 通过configure --with-hsdis=capstone + make images即可完成编译
  • 编译完成后将hsdis-amd64.so放入JDK的lib目录即可使用

下一步,我们将使用这个工具,通过实际案例深入分析JIT汇编,包括方法内联、SIMD向量化、锁消除等JVM优化的底层表现。


参考资料

  • OpenJDK Wiki: PrintAssembly
  • JDK 源码: src/utils/hsdis/README.md
  • HSDIS 源码接口: hsdis.h
> 推荐个人小程序:心情手账日历,欢迎大家使用。
基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-08-20 18:40:10 HTTP/1.1 GET : https://www.yeyulingfeng.com/a/952812.html
  2. 运行时间 : 0.241946s [ 吞吐率:4.13req/s ] 内存消耗:4,680.59kb 文件加载:145
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=b23275cc94587c61e37bdb7b5e056a82
  1. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_static.php ( 6.05 KB )
  7. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/ralouphie/getallheaders/src/getallheaders.php ( 1.60 KB )
  10. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  11. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  12. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  13. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  14. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  15. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  16. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  17. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  18. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  19. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions_include.php ( 0.16 KB )
  21. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions.php ( 5.54 KB )
  22. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  23. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  24. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  25. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/provider.php ( 0.19 KB )
  26. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  27. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  28. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  29. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/common.php ( 0.03 KB )
  30. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  32. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/alipay.php ( 3.59 KB )
  33. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  34. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/app.php ( 0.95 KB )
  35. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cache.php ( 0.78 KB )
  36. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/console.php ( 0.23 KB )
  37. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cookie.php ( 0.56 KB )
  38. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/database.php ( 2.48 KB )
  39. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/filesystem.php ( 0.61 KB )
  40. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/lang.php ( 0.91 KB )
  41. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/log.php ( 1.35 KB )
  42. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/middleware.php ( 0.19 KB )
  43. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/route.php ( 1.89 KB )
  44. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/session.php ( 0.57 KB )
  45. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/trace.php ( 0.34 KB )
  46. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/view.php ( 0.82 KB )
  47. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/event.php ( 0.25 KB )
  48. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  49. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/service.php ( 0.13 KB )
  50. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/AppService.php ( 0.26 KB )
  51. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  52. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  53. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  54. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  55. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  56. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/services.php ( 0.14 KB )
  57. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  58. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  59. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  60. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  61. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  62. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  63. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  64. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  65. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  66. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  67. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  68. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  69. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  70. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  71. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  72. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  73. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  74. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  75. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  76. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  77. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  78. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  79. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  80. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  81. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  82. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  83. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  84. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  85. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  86. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  87. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/Request.php ( 0.09 KB )
  88. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  89. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/middleware.php ( 0.25 KB )
  90. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  91. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  92. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  93. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  94. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  95. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  96. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  97. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  98. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  99. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  100. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  101. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  102. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  103. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/route/app.php ( 4.22 KB )
  104. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  105. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  106. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Index.php ( 10.56 KB )
  108. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/BaseController.php ( 2.05 KB )
  109. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  110. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  111. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  112. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  113. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  114. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  115. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  116. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  117. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  118. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  119. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  120. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  121. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  122. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  123. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  124. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  125. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  126. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  127. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  128. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  129. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  130. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  131. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  132. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  133. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  134. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  135. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Es.php ( 3.11 KB )
  136. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  137. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  138. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  139. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  140. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  141. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/runtime/temp/c935550e3e8a3a4c27dd94e439343fdf.php ( 31.50 KB )
  142. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  143. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  144. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  145. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.001075s ] mysql:host=127.0.0.1;port=3306;dbname=wenku;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001321s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000599s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000684s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001316s ]
  6. SELECT * FROM `set` [ RunTime:0.000578s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001426s ]
  8. SELECT * FROM `article` WHERE `id` = 952812 LIMIT 1 [ RunTime:0.001188s ]
  9. UPDATE `article` SET `lasttime` = 1787222410 WHERE `id` = 952812 [ RunTime:0.018977s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.000710s ]
  11. SELECT * FROM `article` WHERE `id` < 952812 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001147s ]
  12. SELECT * FROM `article` WHERE `id` > 952812 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001097s ]
  13. SELECT * FROM `article` WHERE `id` < 952812 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.001560s ]
  14. SELECT * FROM `article` WHERE `id` < 952812 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.003227s ]
  15. SELECT * FROM `article` WHERE `id` < 952812 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.011760s ]
0.245958s