组内有同学发现,在进程启动前设置好的 匿名内部类 断点,在进程启动完成始终无法进入。我尝试复现,发现只在特定的类上才会出现,其他的类上的匿名内部类没有问题,这就非常奇怪了。一番操作,从 JDB 到 调试 IDEA 断点逻辑,终于发现症结:业务逻辑有一个扫包初始化类的逻辑,这个类初始化的顺序会影响 IDEA 对断点的设置。
IDEA Plugin 开发经验
Posted on
|
In
DevTools
IDEA 插件开发,主要参考官方的 开发文档 ,里面列举了各种插件开发的扩展点。这里主要记录一些开发过程中的经验。目前开发过的插件类型包括:代码生成/PSI、模板代码创建后代码生成、代码检查/Inspection、Live Template、Postfix。
从 volatile 到 TSO - 内存可见性问题浅析
Posted on
|
In
Java
最近在看《深入理解 Linux 内核》,讲到内核同步的时候提到了编译器屏障 __asm__volatile__("" ::: "memory")
,这行内联汇编的语句作用如下:
1)asm 用于指示编译器在此插入汇编语句
2)volatile 用于告诉编译器,严禁将此处的汇编语句与其它的语句重组合优化。即:原原本本按原来的样子处理这这里的汇编。
3) memory 强制 gcc 编译器假设 RAM 所有内存单元均被汇编指令修改,这样 CPU 中的通用寄存器中的数据将作废
这个语义与 C 中的定义是等价的,但是在 Java 中,volatile 还有另外一层加强的语义:
声明成 volatile 的字段,Java 线程模型能确保所有线程看到这个变量的值是一致的。
LinkedBlockingQueue 死循环
Posted on
|
In
Java
上线前压测发现业务线程 hang 死在 LinkedBlockingQueue,同时另外一条线程在 LinkedBlockingQueue.forEach() 中死循环了。看来是触发了 JDK(1.8.0_261) 的 bug。