JVM的FastThrow优化机制

前言:

        前一阵子,在公司排查线上问题发现:出问题的方法报空指针异常,但是没有异常堆栈信息和Message。我一开始以为是代码中做了处理,但是经过翻阅代码发现不是。最后一番查找资料,这种现象是JVM的一种优化机制,叫做FastThrow机制。

正文:

1. FastThrow机制概念:

         JVM会对一些特定类型异常做了Fast Throw优化(Fast Throw机制),如果检测到,在代码里某个位置连续多次抛出同一类型异常,直接抛出一个事先分配好的、类型匹配的异常对象,即没有原始的堆栈信息和Message。Fast Throw机制可以节省内存,减少日志打印,但是对问题排查增加难度。

        JVM只对几个特定类型异常开启了Fast Throw优化,这些异常包括:

  • NullPointerException
  • ArithmeticException
  • ArrayIndexOutOfBoundsException
  • ArrayStoreException
  • ClassCastException

2. FastThrow机制实验:

        使用开发工具运行如下代码,在循环执行7000多次后,会触发FastThrow机制。

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;/*** 〈一句话功能简述〉<br>* 〈验证JVM Fast机制〉* <p>* -XX:-OmitStackTraceInFastThrow** @author hanxiaozhang* @create 2023/5/5* @since 1.0.0*/
public class No3JvmOmitStackTraceInFastThrow {public static void main(String[] args) throws Exception {FastThrowThread npeThread = new FastThrowThread();ExecutorService executorService = Executors.newFixedThreadPool(20);for (int i = 0; i < Integer.MAX_VALUE; i++) {executorService.execute(npeThread);// 稍微sleep一下Thread.sleep(2);}}
}class FastThrowThread extends Thread {private static int count = 0;@Overridepublic void run() {try {System.out.println(this.getClass().getSimpleName() + "--" + (++count));String str = null;System.out.println(str.length());} catch (Throwable e) {e.printStackTrace();}}
}

        出现FastThrow机制打印日志截图:

 3. 关闭FastThrow机制:

        在JVM启动参照中:添加 -XX:-OmitStackTraceInFastThrow参数,就可以关闭FastThrow机制的优化。

4. 拓展,查看JVM是否默认关闭FastThrow机制:

4.1 查看JVM默认参数命令:

        -XX:+PrintFlagsInitial命令侧重于查询修改,"="是JVM默认加载的参数,有冒号:= 表示人为修改之后的参数。

 java -X:+PrintFlagsInitial -version | grep OmitStackTraceInFastThrow

        被修改的参数:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/606808.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实验四:静态路由配置

实验四&#xff1a;静态路由配置 1. 静态路由 ( 一般配置 ) 【实验名称】静态路由配置 【实验目的】掌握静态路由的配置方法&#xff0c;理解路由表的作用和原理 【实验设备】路由器&#xff08; 2 台&#xff09;、计算机&#xff08; 2 台&#xff09;、交叉线&#xf…

Open3D 点云下采样抽稀(7)

Open3D 点云下采样抽稀&#xff08;7&#xff09; 一、算法介绍二、算法实现1.代码 一、算法介绍 点云抽稀在计算机图形学和计算机视觉中有着广泛的应用&#xff0c;其作用包括但不限于以下几点&#xff1a; 数据压缩&#xff1a; 点云抽稀可以有效地减少点云数据量&#xff0…

鸿蒙开发解决hvigor ERROR: Failed :entry:default@ProcessLibs...

文章目录 项目场景:问题描述原因分析:建议的解决方案总结HarmonyOSArkTS项目场景: 项目无法在真机上运行。报错 hvigor ERROR: Failed :entry:default@ProcessLibs… hvigor ERROR: 2 file found in ‘lib/arm64-v8a/libagccrypto.so’. This may cause unexpected errors …

问答领域的基本了解

问答领域是人工智能领域中的一个重要研究方向&#xff0c;旨在让计算机能够理解人类提出的问题&#xff0c;并以自然语言形式回答这些问题。问答系统可以应用于各种场景&#xff0c;包括搜索引擎、虚拟助手、智能客服等。 一.目标 目标&#xff1a; 问答系统的主要目标是使计…

为何大厂急招鸿蒙开发工程师?别有洞天

正确看待鸿蒙不再兼容安卓版本&#xff0c;而大厂急招鸿蒙工程师这一举动已经是预料之中的。我们一步步来看鸿蒙是怎么发展过程的。为什么互联网大厂急招鸿蒙开发岗位&#xff1f; 鸿蒙的发展历程 华为历经4年&#xff0c;从2019年开始的鸿蒙问世2.0版本到2023年末4.0宣布“不…

r语言拟合曲线

r语言拟合曲线 #圆滑曲线 library(ggalt) library(ggplot2) df <- read.csv("lqs-1.csv",headerT) p2<-ggplot(datadf,aes(xx,yy))geom_point(size1) geom_smooth(span0.1)p2结果

CTFshow web入门web128-php特性31

开启环境: 一个新的姿势&#xff0c;当php扩展目录下有php_gettext.dll时&#xff1a; _()是一个函数。 _()gettext() 是gettext()的拓展函数&#xff0c;开启text扩展get_defined_vars — 返回由所有已定义变量所组成的数组。 call_user_func — 把第一个参数作为回调函数调…

【算法练习】leetcode算法题合集之二叉树篇

递归遍历基础篇 前序遍历&#xff0c;中序遍历&#xff0c;后序遍历是根据处理根节点的位置来命名的。 树的处理大多用到了递归&#xff0c;递归需要知道终止条件。 前序遍历&#xff08;中左右&#xff09; 144.二叉树的前序遍历 中左右&#xff0c;先处理根节点&#xff0c;…

OpenGL 绘制一个三角形

在上一篇 OpenGL 顶点着色器和片段着色器的介绍实现中&#xff0c;我们向进一步绘制三角形&#xff0c;事实上只需要修改 一下两处即可 修改顶点着色器 // 顶点着色器const char* vertexShaderSource R"( #version 460 corevoid main(){// 顶点坐标vec4 vertices[3] v…

Java面试高招:程序员如何在面试中脱颖而出

Java面试高招&#xff1a;程序员如何在面试中脱颖而出 《Java面试高招&#xff1a;程序员如何在面试中脱颖而出》摘要引言面试经历面试失败的反思 面试技巧侦探式的问题解决无敌铁金刚的坚定决心 参考资料 博主 默语带您 Go to New World. ✍ 个人主页—— 默语 的博客&#x1…

4.5 A TILED MATRIX MULTIPLICATION KERNEL

我们现在准备展示一个tiled矩阵乘法内核&#xff0c;该内核使用共享内存来减少对全局内存的流量。图中4.16显示的内核。实施图4.15.中所示的阶段。在图4.16中&#xff0c;第1行和第2行声明Mds和Nds为共享内存变量。回想一下&#xff0c;共享内存变量的范围是一个块。因此&#…

Redis原理篇(Dict的收缩扩容机制和渐进式rehash)

Dict&#xff08;即字典&#xff09; Redis是一种键值型数据库&#xff0c;其中键与值的映射关系就是Dict实现的。 Dict通过三部分组成&#xff1a;哈希表&#xff08;DictHashTable&#xff09;&#xff0c;哈希节点(DictEntry)&#xff0c;字典&#xff08;Dict&#xff09…

Linux磁盘空间与文件大小查看命令详解

1. 查看磁盘空间大小 在Linux系统中&#xff0c;有多个命令可以用来查看磁盘空间的使用情况。最常用的命令是df&#xff08;disk free&#xff09;。 df -hdf命令的 -h 选项以人类可读的方式显示磁盘空间&#xff0c;该命令将显示文件系统的使用情况、剩余空间等信息。 2. 查看…

书生·浦语大模型全链路开源体系 学习笔记 第二课

基础作业&#xff1a; 使用 InternLM-Chat-7B 模型生成 300 字的小故事&#xff08;需截图&#xff09;。熟悉 hugging face 下载功能&#xff0c;使用 huggingface_hub python 包&#xff0c;下载 InternLM-20B 的 config.json 文件到本地&#xff08;需截图下载过程&#xf…

tiktok云手机有用吗?用哪个好?

很多做独立站的跨境卖家都会搭配一些社媒平台给自己引流带货&#xff0c;比如说目前很火的TikTok&#xff0c;这也是目前比较有效的一种引流方式。本文将介绍tiktok运营方法以及如何用tiktok云手机规避运营风险。 TikTok是个不错的风口&#xff0c;不过我们在国内想要运营好Tik…

数环通12月产品更新:新增数据表相关功能、优化编辑器,15+应用进行更新

为了满足用户不断增长的需求&#xff0c;我们持续努力提升产品的功能和性能&#xff0c;以更好地支持用户的工作。 数环通12月的最新产品更新已经正式发布&#xff0c;带来了一系列强大的功能&#xff0c;以提升您的工作效率和系统的可靠性。 更新快速预览 新增&优化功能&a…

软考-软件设计师 知识点整理(一篇就过了 建议收藏)

文章目录 一 计算机组成CPU寻址方式校验码奇偶校验码&#xff08;只能检一位错&#xff0c;并且不能纠错&#xff09;循环冗余校验码CRC&#xff08;只能检错&#xff0c;不能纠错&#xff09;海明码 计算机体系结构分类Flynn分类法&#xff08;理论存在&#xff1a;多指令单数…

机器学习-聚类算法详解

K-maens & DBSCAN 与分类、回归任务不同&#xff0c;聚类任务事先并不知道任何样本标签&#xff0c;通过数据之间的内在关系把样本划分为若干类别&#xff0c;使得同类别之间的相似度高&#xff0c;不同类别之间的样本相似度低。 K-means 基本思想 K-means算法的基本思想是…

Java LeetCode篇-二叉搜索树经典解法(实现:二叉搜索树的最近公共祖先、根据前序遍历建树等)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 判断合法 1.1 使用遍历方式实现验证二叉搜索树 1.2 使用递归方式实现验证二叉搜索树 2.0 求范围和 2.1 使用非递归实现二叉搜索树的范围和 2.2 使用递归方式实现…

『CV学习笔记』Pyinstaller打包exe后,执行时onnxruntime包报警告(Init provider bridge failed)

Pyinstaller打包exe后,执行时onnxruntime包报警告(Init provider bridge failed) 文章目录 一. 问题描述二. 解决办法三. 参考文献『CV学习笔记』Pyinstaller打包python程序遇到的问题(Win&Linux)+Cython编译动态库+PyArmor加密一. 问题描述 Platform: WindowsONNX Runtim…