My Blog

「is null evil?」

Spring框架中RefreshScope注解如何实现Bean的热替换

0.问题 ​ 近来被人问到nacos动态更新的原理,除了长轮询之外,关键就涉及到Spring对bean的管理,还有@RefreshScope的实现。刚好触发了我对Spring源码的再次学习,尤其是bean加载和生命周期管理部分,动态加载的问题恰好是一个很好的切入点来加深理解1。 序号 问题 1. ...

关于java线程池ThreadPoolExecutor实现中参数设计,锁和中断的疑问

0.问题 关于java线程池实现原理,网上已经有很多清晰的好文章1 2 3,本文不再狗尾续貂。笔者对其中的几个实现点有些疑惑并尝试给出一些解释。主要问题如下: 序号 问题 1. Future是如何异步得到执行结果的? 2. ThreadPoolEx...

java同步机制之LockSupport::park/unpark实现溯源-part4

0.问题 为什么要探究LockSuport的park()/unpark()实现,因为AQS线程等待和唤醒即依赖此二者。 1. LockSupport里的park/unpark 2. park/unpark在jvm层面是如何实现的 3. LockSu...

单步调试java invokestatic在hotspot中的解释执行

0.目的 接上篇,环境及版本等仍相同 invokestatic的汇编实现 参数传递 所谓方法解析(resolve)的内涵 1.invokestatic的汇编实现 先大概过一遍相关核心代码,这样便于与最终生成的汇编对照,以助于理解其逻辑: hotspot/src/cpu/x86/vm/templateTable_x86_64.cpp 1 2 3 4 5 6 7 8 ...

单步调试java main方法在hotspot中的解释执行

0.目的 环境:openjdk-8b120,不再是openjdk8u,因为github官方仓库没有,为避免不必要的上传等麻烦,故切换版本。 java方法是如何解释执行的 相邻字节码如何关联起来 栈顶缓存是怎么回事 栈帧是怎样的 如何用gdb一步步调试进入上述关键节点 应该说,本文的目的不是为彻底讲明白解释执行原理,而是调试其关键节点和查验相关物理状态。Debug...

java object header markword的诡异实现(openjdk8u)

0.问题 java对象头如下所示,比较奇怪的是openjdk8u里面的实现: |------------------------------------------------------------------------------|--------------------| | Mark Word (64 bits)...

java对象成员变量的内存布局及类的解析

0.背景 看jvm源码的时候,不禁会想: java程序中打印对象堆内存地址,和debug jvm时观测到的一样吗,怎么取得这些值? 对象成员变量在内存中如何布局,遵从定义顺序吗,Unsafe::objectFieldOffset获取的是什么,又是怎么实现的呢? 上述实现跟类的加载解析是如何关联的? 有类继承关系,有静态变量是会如何? 源码及环境参考:jdk8u,64...

java方法调用的实现

0.why? 1. invokevirtual invokestatic invokespecial invokeinterface Invokedynamic 是如何实现java类的多态和继承特性的。 2.什么是method table? 3.什么是stackframe? 1.既生瑜何生亮? 1.1 invokevirtual invokevirtu...

对java classloader加载模式,可见性和独特性的一些测试

0.why? java classloader这个topic可以说是个java boy都要唠两句,烂大街了。这次打算细致深入研究jvm的时候,发现每个类加载器都有自己的namespace这句话给我带来了一些困扰,namespace在哪里?对delegation, visibility 和 uniqueness这三个重要特性有何影响? 1.溯源加载 确保类型安全 类型隔离,多次...

volatile-2-volatile在jvm内部的实现

0.为什么要写本篇? 既然jitwatch可以查看JIT编译后的机器码,那么应该可以调戏volatile变量,对其进行读写,然后看看产生的内存屏障(memory barrier)到底是什么样的?能看到loadload, loadstore, storeload, storestore对应的指令吗? 1.JIT编译后的屏障是什么样的? 环境:jdk1.8, Intel Core i5 ...