分类 Java 下的文章

本文适用于 macOS(包括 Intel 和 Apple Silicon/M 系列芯片),可在终端中直接操作,笔者使用的是 M4 MacBook Air,系统是最新的 macOS 26.0.1。

SDKMAN!(Software Development Kit Manager)是一个可以方便地安装、管理和切换不同版本的跨平台的命令行工具,类似于 Python 生态的 pyenv, Node.js 生态的 nvm。

笔者使用的是 macOS 操作系统,但 Windows/Linux 操作应该也是类似的。

安装 SDKMAN

打开 macOS 终端(Terminal),执行:

curl -s "https://get.sdkman.io" | bash

- 阅读剩余部分 -

今天线上出了一个 bug,看日志是空指针异常:

java.lang.NullPointerException: null

但日志里只有这么多,没有详细的栈信息,也就是说,看起来像是人为抛了一个空的 NullPointerException,但看代码确实没有问题,确实打印了详细信息。

搜了一下,原因如下:

JVM 虚拟机会对异常信息进行优化,当相同异常出现很多次,会认为它是热点异常,忽略掉异常堆栈信息;
通过增加 JVM 参数:-XX:-OmitStackTraceInFastThrow 可解决。

于是搜索所有的这个异常的信息,找到第一条,终于发现了详细的栈信息。

顺利定位到了代码位置,修复了问题。