今天在调试时又遇到行号无法对齐的问题,因为之前开发 Java Agent 时遇到过,常见于源码 jar 与运行时 jar 不一致导致,本文简要记录。
OmitStackTraceInFastThrow
发表于
今天有一台服务器频繁打印 java.lang.NullPointerException
,但是不包含栈帧信息,起初我以为是应用层代码使用 log4j2 打印时直接调用了 log.error(e)
进行打印,因为该方法最终会调用异常对象的 toString()
方法然后打印出异常信息,对于 java.lang.NullPointerException
实例,最终调用的 java.lang.Throwable#toString
获取到需要打印的字符串:
1 | /** |
rangeCheck
发表于
如果看过 JDK 8 中 ArrayList
的源码,你会发现存在如下代码 ArrayList.java at jdk8-b120:
1 | /** |
Striped
发表于
在业务中曾有为不同的 key
的操作实现锁语义的需求,常见的实现为构建一个线程安全的 Map
实现然后为每个 key
创建对应的对象用于互斥锁,但是该实现存在内存泄漏的问题,即随着不同 key
不停地出现,该 Map
实例会越来越大,之前为每个 key
创建的对象一直驻留在内存中,即使 key
永远不再出现。比如 JDK 7 引入的支持并行类加载的特性 Multithreaded Custom Class Loaders in Java SE 7 中,引入了如下代码:
1 | // Maps class name to the corresponding lock object when the current |
ConcurrentHashMap
发表于
本文主要记录 JDK 12 中 ConcurrentHashMap
的扩容实现。首先需要关注的为 sizeCtl
变量,其定义如下:
1 | /** |