堆栈跟踪 堆栈跟踪_寻找缺少的堆栈跟踪

堆栈跟踪 堆栈跟踪

我们最近在博客中发表的一篇评论带回了有关特定体验的一些回忆。 我希望我没有经历过的那种经历。 在创建Plumbr之前很长一段时间,我正在调试一个应用程序,该应用程序每次在蓝月亮时都会给我一个例外。 详细程度令人震惊:

java.lang.NullPointerException

就是这样–没有可使用的stacktrace。 而且该应用程序由一个真正邪恶的系统管理员保护着,他不允许我在部署后100码之内。 因此,为所有通宵人员准备了一个阶段,他们试图了解导致错误的原因。 我敢打赌,大多数读者都知道我在这里说什么。 第一个嫌疑犯是显而易见的。 暑期实习生从未真正获得过异常处理,并且可以轻松地吞下异常,而无需重新抛出或正确记录日志。 所以我期望在代码中的某处找到这样的东西:

System.out.println(e);

但是,无论我对源代码进行多彻底的检查 ,都找不到类似这种粗心大意的东西。 从第二天起,除了每隔几个小时接一个电话并提供“进度报告”,我就没有多少回忆。 不幸的是,进展遥遥无期。 除非我想尽一切努力对生产进行大量更新,以使他们对可能的原因有一些更有意义的尝试。 但是,我确实记得我开始怀疑自己一直认为不可能的事情时对测试Java的信念。 也就是说,Java能够从字面上吞噬您的Exception堆栈跟踪。 实际上,JIT可以并且将会做到。 需要证明吗? 运行以下代码:

for (int i = 0; i < 100_000; i++) {try {args[0].toString();} catch (Exception e) {if (e.getStackTrace().length == 0) {System.out.format("Java ate my stacktrace after iteration #%d %n", i);break;}}
}

在配备了最新稳定JDK 7热点的MB Pro中,异常堆栈跟踪在#12,288迭代中被吞噬。 但是为什么在地球上会发生这种情况,又如何避免呢? 简单的答案是它是运行时期间应用的JIT优化之一。 正如我们最近发表的一篇文章所描述的,创建Exceptions 非常昂贵 。 因此,出于性能目的,当JIT发现多次抛出异常时,可以重新编译代码。 重新编译后,编译器可以使用不提供堆栈跟踪的预分配异常来选择更快的策略。 希望你们中的绝大多数将永远不必处理这种情况。 毕竟,当以触发JIT切换到预分配的异常的速度创建异常时,您肯定在做其他错误。 毕竟,仅在例外情况下才应发生例外。 但是对于那些这样做的人,解决方案很简单。 您可以通过将-XX:-OmitStackTraceInFastThrow添加到JVM启动参数来禁用预分配的异常。 在下一次JVM重新启动后,我也找到了罪魁祸首。

参考: Plumbr Blog博客上的JCG合作伙伴 Nikita Salnikov Tarnovski 寻求丢失 堆栈跟踪的信息 。

翻译自: https://www.javacodegeeks.com/2013/09/on-a-quest-for-missing-stacktraces.html

堆栈跟踪 堆栈跟踪

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

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

相关文章

Java实现冒泡排序动画展示

原理&#xff1a;每次比较两个相邻的元素&#xff0c;将较大&#xff08;较小&#xff09;的元素交换至右边。 思路&#xff1a;每次冒泡排序操作都会将相邻的两个元素进行比较&#xff0c;看是否满足大小关系要求&#xff0c;如果满足&#xff0c;就根据需要&#xff08;从小…

使用Zipkin和Sleuth进行SpringBoot微服务跟踪

在本文中&#xff0c;我们将了解使用Zipkin和Spring cloud sleuth框架的微服务分布式跟踪。 尽管微服务具有自身的挑战&#xff0c;但微服务是出色的架构。 复杂的微服务架构具有与其他微服务的下游和上游依存关系&#xff0c;并且一切都是相互联系的。 在大多数情况下&#x…

空指针异常NullPointerException解决

只需要根据出现空指针异常的情况进行相应更改即可解决。 情况①:一维数组在栈空间中的变量没有指向堆空间中数组元素实体的首地址信息 int[] arr1 new int[]{1,2,3}; arr1 null; System.out.print(arr1[0]);解决方法就是注意让数组不为空null&#xff0c;即它存有数组首地址…

log4j性能 slf4j_Log4j 2:性能接近疯狂

log4j性能 slf4j最近&#xff0c;Apache社区中一位受人尊敬的成员尝试了Log4j 2并在Twitter上写道&#xff1a; TheASF &#xff03;log4j2摇摇欲坠 &#xff01; 性能接近疯狂^^ http://t.co/04K6F4Xkaa — Mark Struberg&#xff08;struberg&#xff09; 2013年5月7日 &a…

计算机二级web题目(6)--动态网页技术概述

1 [单选题] 下列不属于动态网页格式的是&#xff08;D&#xff09;。 A. ASP B. JSP C. ASPX D. VBS 2 [单选题]相对比较早出现的服务器端动态网页技术是&#xff08;B&#xff09;。 A. ASP B. CGI C. JSP D. JavaScript 3 [单选题] PHP中采用的模板技术是&#xff08;A&#…

java 输入人名_Java 读取控制台输入

Java 提供了我们两种读取控制台输入的方法&#xff1a;一、传统方法public class ReadConsoleOld {public static void main(String[] args) throws IOException {BufferedReader reader new BufferedReader(new InputStreamReader(System.in));while(true){String line read…

JVM体系结构:JVM和JVM体系结构概述

各位读者好&#xff01; 在本教程中&#xff0c;我们将了解和学习Java虚拟机&#xff08;JVM&#xff09;及其体系结构。 本教程将帮助您正确回答以下问题&#xff1a; Java中的JVM是什么&#xff1f; JVM的不同组件 JVM&#xff0c;JRE和JDK之间的区别 1.简介 Java虚拟机&…

java option请求_java – 如何说服spring 4.2将OPTIONS请求传递给控制器

我们在控制器上使用带有RestController注释的spring mvc,我们正在处理控制器中的授权.我们使用相同的代码来设置响应CORS飞行前请求的允许方法.为实现这一目标,我们有&#xff1a;在调度程序servlet的配置中,然后我们有&#xff1a;RequestMapping(value"/some/collection…

计算机二级web题目(7.1)--综合选择题1

(1)程序流程图中带有箭头的线段表示的是&#xff08;C&#xff09;。 A、图元关系 B、数据流 C、控制流 D、调用关系 解析&#xff1a;①长方形表示要处理执行的步骤。②菱形表示条件判断。③平行四边形表示输入或输出。 (2)结构化程序设计的基本原则不包括&#xff08;A&#…

java8 javafx_Java 8的新增功能(第1部分– JavaFX)

java8 javafx免责声明&#xff1a;我不为Oracle工作&#xff0c;也不以任何方式代表Oracle。 此功能列表不是官方的。 作为“局外人”&#xff0c;这只是我研究的一部分。 Java 8已在大约两个月前完成了功能&#xff0c;并且开发者预览版即将到来&#xff08;两周后&#xff0…

Java面向对象(1)--对象的创建使用类的实例化

1、类与对象 类是对一类事物的描述&#xff0c;是抽象的、概念上的定义。 对象是实际存在的该类事物的每个个体&#xff0c;因而也称为实例(instance)。 通常都是将类实例化&#xff0c;也就是对象的创建 可以理解为&#xff1a;类 抽象概念的“人”&#xff1b;对象 实实在…

java ee 下载 安装配置_JavaEE下载安装及配置.doc

JavaEE下载安装及配置Apache Tomcat下载安装及配置下载Tomcat6.X最新版本官网下载地址&#xff1a;/tomcat/tomcat-6/v6.0.35/bin/右键迅雷下载即可。安装怎样在windows下安装tomcat步骤/方法双击.exe安装程序&#xff0c;显示如下图所示的欢迎页面。点击next按扭出现如下图所示…

Java简单内存解析

堆&#xff08;Heap&#xff09;&#xff0c;此内存区域的唯一目的就是存放对象实例&#xff0c;几乎所有的对象实例都在这里分配内存。这一点在Java虚拟机规范中的描述是&#xff1a;所有的对象实例以及数组都要在堆上分配。 通常所说的栈&#xff08;Stack&#xff09;&…

servlet3异步_Servlet 3的异步Servlet功能

servlet3异步在深入了解什么是异步Servlet之前&#xff0c;让我们尝试了解为什么需要它。 假设我们有一个Servlet&#xff0c;处理时间很长&#xff0c;如下所示。 LongRunningServlet.java package com.journaldev.servlet;import java.io.IOException; import java.io.Prin…

计算机二级web题目(7.2)--基本操作题1

前些天发现了一个巨牛的人工智能学习电子书&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;无广告&#xff0c;忍不住分享一下给大家。&#xff08;点击跳转人工智能学习资料&#xff09; 1、在考生文件夫下的Web1目录中&#xff0c;存有1.htm和label2.htm文件&#xff…

java矩阵连乘算法_使用java写的矩阵乘法实例(Strassen算法)

Strassen算法于1969年由德国数学家Strassen提出&#xff0c;该方法引入七个中间变量&#xff0c;每个中间变量都只需要进行一次乘法运算。而朴素算法却需要进行8次乘法运算。原理Strassen算法的原理如下所示&#xff0c;使用sympy验证Strassen算法的正确性import sympy as sA …

计算机二级web题目(7.3)--简单应用题1

说明&#xff1a;如有不清楚的地方&#xff0c;可以评论区留言&#xff0c;及时回复。 1、在考生文件夹下的Web3目录中&#xff0c;存有3.htm文件&#xff0c;该文件不完整&#xff0c;请在标有********Found******字符串的注释行下一语句的下划线处填入正确内容&#xff0c;然…

使用Spring Security 5.0和OIDC轻松构建身份验证

“我喜欢编写身份验证和授权代码。” 〜从来没有Java开发人员。 厌倦了一次又一次地建立相同的登录屏幕&#xff1f; 尝试使用Okta API进行托管身份验证&#xff0c;授权和多因素身份验证。 Spring Security不仅是一个功能强大且可高度自定义的身份验证和访问控制框架&#xf…

java访问类的方法_Java:如何从另一个类访问方法

小编典典你需要以某种方式为Alpha类提供对cBeta的引用。有三种方法可以做到这一点。1)在构造函数中为Alphas提供Beta。在Alpha课堂上写道&#xff1a;public class Alpha {private Beta beta;public Alpha(Beta beta) {this.beta beta;}并从main()调用cAlpha new Alpha(cBeta…