乐于分享
好东西不私藏

Java锁机制之Java对象重量级锁源码剖析

Java锁机制之Java对象重量级锁源码剖析
  • 一、 `ObjectMonitor::EnterI` 核心源码分析
  • 二、 多线程并发“挤压” `_cxq` 的演进全过程
    • 1. 第一阶段:并发乐观读取
    • 2. 第二阶段:硬件级 CAS 决胜
    • 3. 第三阶段:冲突缓解与分支重试(Retry & Mitigate)
  • 三、深度架构思考:为什么要这样设计?
  • 四、关键技术点深度总结

前言

本文旨在记录近期研读Java源码的学习心得与疑难问题。由于个人理解水平有限,文中内容难免存在疏漏,恳请读者不吝指正

Java对象重量级锁源码剖析

在 HotSpot 虚拟机中,当多个线程同时竞争 Java 对象的重量级锁(ObjectMonitor)失败时,它们会被驱逐到慢速路径(Slow Path)中。ObjectMonitor::EnterI 就是处理线程因锁饱和而需要封装、排队并挂起的核心方法。

在这里,涉及到一个关键的无锁低开销数据结构:_cxq(Contention Queue,竞争队列)。它是一个无锁的、单向的 LIFO(后进先出) 链表。所有刚进入慢速路径、还未获得锁的线程(称为 Recently Arrived Threads,简称 RATs),都会并发地通过 CAS 指令“挤入”这个队列的头部。


一、 ObjectMonitor::EnterI 核心源码分析

以下是 OpenJDK 8 中 ObjectMonitor::EnterI 方法中关于线程封装并挤压进入 _cxq 链表的核心代码片段,已为你高度还原并补充了底层系统级工程师视角的详尽注释:

void ATTR ObjectMonitor::EnterI (TRAPS){    Thread * Self = THREAD ;// 检查并尝试获取锁,如果成功则直接返回if (TryLock (Self) > 0return ;// 延迟初始化管程的相关数据DeferredInitialize () ;// 再次尝试自旋获取锁,万一这时候锁被释放了呢if (TrySpin (Self) > 0return ;// ==========================================// 【核心排队逻辑:多线程并发挤压进入 _cxq 队列】// ==========================================// 1. 栈上分配 ObjectWaiter 节点,将当前线程(Self)包装其中// 这样做非常巧妙!因为当前线程抢不到锁即将被挂起,其栈帧(Stack Frame)在整个挂起期间都是绝对安全的,// 这完美免去了在堆内存(Heap)中申请节点的巨大吞吐开销和垃圾回收压力。ObjectWaiter node(Self)// 初始化当前线程的 ParkEvent(管程挂起与唤醒的核心系统级内核事件对象)    Self->_ParkEvent->reset() ; // 由于 _cxq 是单向链表,只需要使用 next 指针。// 这里故意将 prev 指针设为一个非法死地址(0xBAD),用于 Debug 阶段防御性断言。    node._prev = (ObjectWaiter *) 0xBAD ; // 显式标记该节点当前所处的锁状态:TS_CXQ,代表其正在 _cxq 队列中等待    node.TState = ObjectWaiter::TS_CXQ ;     ObjectWaiter * nxt ;// 2. 进入无锁死循环(CAS 自旋),直到成功将自己“挤压”进 _cxq 单向链表的头部for (;;) {// 【步骤 A:乐观读取】// 获取当前最新的 _cxq 链表头节点,并将其赋值给当前临时变量 nxt,同时让当前节点的 _next 指向它。// 这相当于让当前节点在本地做好准备:隐式地成为新的头节点,并指向老头节点。        node._next = nxt = _cxq ; // 【步骤 B:硬件级原子 CAS 替换】// 调用 Atomic::cmpxchg_ptr 进行原子替换。在 OpenJDK 8 中,其参数含义依次为:// 参数 1: &node          -> 准备写入的新值(即当前线程节点在栈上的地址)// 参数 2: &_cxq           -> 要修改的目标内存地址(ObjectMonitor 对象中的 _cxq 指针)// 参数 3: nxt            -> 预期中的旧值(我们在【步骤 A】中乐观读取到的老头节点地址)// // 底层行为:CPU 会拦截并验证当前内存中的 *_cxq 是否仍然等于 nxt。// 如果等于(未变):说明期间没有其他线程干扰,成功将 _cxq 指向 &node,并返回旧值 nxt。// 如果不等于(已变):说明有其他并发线程捷足先登“挤”了进来,此时不修改内存,返回实际的最新的 _cxq 值。if (Atomic::cmpxchg_ptr (&node, &_cxq, nxt) == nxt) {// 返回值等于预期旧值,说明 CAS 成功!当前节点顺利成为 _cxq 的新头部,安全破出死循环。break ;         }// 【步骤 C:并发冲突缓解与“贪婪”抢锁优化】// 如果走到这里,说明上述 CAS 失败了(即 Atomic::cmpxchg_ptr 返回的值 != nxt)。// 这代表刚才发生了多线程“挤压”冲突。在重新回到循环顶部进行下一次 CAS 冲锋前,// HotSpot 引入了一个极其强悍的启发式优化:再次调用 TryLock 尝试偷锁。if (TryLock (Self) > 0) {// 如果运气爆棚,在这里抢锁成功,则直接退出 EnterI 方法!// 此时该线程连队列都不用进了,更不需要调用昂贵的系统调用去挂起(park),极大地提升了吞吐量。return ;         }// 偷锁失败,继续循环,重新读取最新的 _cxq 头部,发起下一次排队冲锋。    }// 后续逻辑:进入等待被唤醒的阻塞状态...}

二、 多线程并发“挤压” _cxq 的演进全过程

为了更直观地理解多线程是如何通过 Atomic::cmpxchg_ptr 挤压该单向链表的,我们假设一个具体的并发场景:

  • 当前 _cxq 队列中已经有一个老节点 Node_Old
  • 此时,有三个线程(Thread_AThread_BThread_C)同时由于抢锁失败,并发进入了 EnterI 的无锁死循环中。

1. 第一阶段:并发乐观读取

三个线程在各自的 CPU 核心上并行执行到 node._next = nxt = _cxq;。 此时它们都在各自核心的寄存器/局部变量 nxt 中存下了当前的队列头 Node_Old。并且它们各自栈上的节点指针也都指向了 Node_Old

  • nodeA._next = Node_Old;
  • nodeB._next = Node_Old;
  • nodeC._next = Node_Old;

2. 第二阶段:硬件级 CAS 决胜

三个线程几乎同时发起了 Atomic::cmpxchg_ptr 汇编指令(在 x86 架构下,底层会转换为带有 lock cmpxchg 前缀的单条硬件指令,该指令会触发 MESI 缓存一致性协议的独占锁或锁住总线)。

  • Thread_A 动作最快:它的 CPU 核心率先抢占了对 _cxq 内存行的修改权。CPU 发现此时内存里的 _cxq 的确等于 Node_Old,于是成功将 _cxq 的值修改为 &nodeA。Thread_A 的 CAS 宣告成功,它顺利 break 调出循环。
  • Thread_B 紧随其后发起 CAS:它的指令去比对 _cxq 是否等于它预期的 Node_Old。然而此时内存中的 _cxq 已经被 Thread_A 改成了 &nodeA。CPU 判定 &nodeA != Node_Old,因此 Thread_B 的 CAS 宣告失败,内存不作修改。
  • Thread_C 同样发起 CAS:它预期的旧值也是 Node_Old,与现在的真实值 &nodeA 不符,Thread_C 的 CAS 也宣告失败

3. 第三阶段:冲突缓解与分支重试(Retry & Mitigate)

  • Thread_B 和 Thread_C 由于 CAS 失败,不会立刻死板地重新排队,而是先去执行 TryLock 探测锁是否恰好空闲。

  • 假设锁依然被别人占用,TryLock 失败。Thread_B 和 Thread_C 重新回到 for(;;) 循环的顶部。

  • 此时它们重新读取 _cxq

  • nodeB._next = nxt = _cxq; -> 此时读取到的 nxt 变成了 &nodeA

  • 接下来,Thread_B 和 Thread_C 将在新一轮的 &nodeA 头节点基础上,重复上述的挤压竞争,直到成功将自己变为新的全局 _cxq 头部。


三、深度架构思考:为什么要这样设计?

从系统和架构的角度来看,HotSpot 在这段“挤压”逻辑中展现了极致的性能调优哲学:

  1. 栈上分配(Stack Allocation)免去 GC 开销 传统的链表队列通常需要在堆上 new ObjectWaiter()。而 HotSpot 直接在线程的 执行栈(Execution Stack) 上创建局部变量 ObjectWaiter node(Self)。由于当前线程抢不到锁即将被挂起,它的当前栈帧(Stack Frame)处于冰冻状态,绝对不会被销毁。这完美利用了线程生命周期,避免了频繁分配和回收节点的开销。
  2. LIFO 结构完美契合单指针 CAS 为什么 _cxq 设计成后进先出(LIFO)而不是先进先出(FIFO)?因为将节点插入到单向链表的头部(Head Push),只需要变更一个 _cxq 全局指针。如果实现无锁的 FIFO,通常需要同时维护 Head 和 Tail 两个指针,在并发环境下会引发复杂的双指针同步与 ABA 问题,其算法复杂度和硬件锁竞争会呈指数级上升。
  3. “贪婪”的临门一脚(Greedy TryLock) 在无锁编程中,CAS 失败意味着高密度的并发冲突。传统的教科书做法通常是直接重试或者退避(Backoff)。而 HotSpot 却在这里插入了一个 TryLock。这是一个非常有价值的启发式优化:当发生冲突时,意味着时间流逝了一小段,此时原本持有锁的那个老线程可能刚好执行完了同步块并释放了锁。如果能在这个间隙“顺手牵羊”拿到锁,就能完美避免后续昂贵的内核态切换(Thread Park)成本。

四、关键技术点深度总结

  • 头插法(LIFO 栈结构)_cxq 本质上是一个无锁栈。新来的线程总是通过修改 _cxq 指针把自己“挤”到最前面成为新的头节点。这就是为什么 Java 的重量级锁在某些激进场景下呈现出非公平性(后来的线程反而可能先被唤醒,因为它们在栈顶)。
  • 硬件级锁保证Atomic::cmpxchg_ptr 在底层依赖具体的 CPU 指令(例如 x86 架构下的 lock cmpxchg)。它会锁定北桥总线或触发 MESI 缓存一致性协议,确保“读取-比较-替换”这三个步骤在硬件层面是不可分割的单步原子操作。
  • 天然免疫 ABA 问题:在通用的无锁队列中,由于内存释放与复用,常常需要引入版本号来解决 ABA 问题。但在 HotSpot 的 EnterI 中,ObjectWaiter node 是分配在线程私有栈上的局部变量。这意味着,只要该线程没有退出 EnterI 方法,这个内存地址绝不可能被其他线程复用。因此,HotSpot 在这里不需要任何额外的版本号或 Epoch 机制,非常干净利落地完成了无锁高并发链表的操作。
基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-06-28 14:34:15 HTTP/1.1 GET : https://www.yeyulingfeng.com/a/811411.html
  2. 运行时间 : 0.266610s [ 吞吐率:3.75req/s ] 内存消耗:4,707.67kb 文件加载:145
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=5f6914a456dd357eeadb9ef0513c48f7
  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 ( 3.94 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 ( 9.87 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.30 KB )
  136. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  137. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  138. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  139. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  140. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  141. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  142. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  143. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  144. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/runtime/temp/c935550e3e8a3a4c27dd94e439343fdf.php ( 31.50 KB )
  145. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.001071s ] mysql:host=127.0.0.1;port=3306;dbname=wenku;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001561s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.001182s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.005519s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001845s ]
  6. SELECT * FROM `set` [ RunTime:0.000653s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001542s ]
  8. SELECT * FROM `article` WHERE `id` = 811411 LIMIT 1 [ RunTime:0.002151s ]
  9. UPDATE `article` SET `lasttime` = 1782628455 WHERE `id` = 811411 [ RunTime:0.028987s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.013509s ]
  11. SELECT * FROM `article` WHERE `id` < 811411 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001918s ]
  12. SELECT * FROM `article` WHERE `id` > 811411 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.002113s ]
  13. SELECT * FROM `article` WHERE `id` < 811411 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.011865s ]
  14. SELECT * FROM `article` WHERE `id` < 811411 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.006092s ]
  15. SELECT * FROM `article` WHERE `id` < 811411 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.006050s ]
0.270687s