慎用异常(Exception)

异常对性能不利。

1.抛出异常首先要创建一个新的对象。

2.Throwable接口的构造函数调用名为fillInStackTrace()的Native方法,fillInStackTrace()方法检查堆栈,收集调用跟踪信息。只要有异常被抛出,VM就必须调整调用堆栈,因为在处理过 程中创建了一个新的对象。

因此,异常只能用于错误处理,不应该用来控制程序流程。

如果频度很高的抛出异常,性能下降是很巨大的,参见stackoverflow上的一篇文章

http://stackoverflow.com/questions/299068/how-slow-are-java-exceptions

http://java-performance.info/throwing-an-exception-in-java-is-very-slow/

时间: 2024-11-09 05:43:53

慎用异常(Exception)的相关文章

理解Python语言里的异常(Exception)

Exception is as a sort of structured "super go to".异常是一种结构化的"超级goto". 作为一个数十年如一日地钟爱C语言的程序员(因为C程序员需要记忆的关键字很少,而且可以很惬意地玩内存),对于高级语言如Python里的异常(Exception)一直不甚理解,尤其是其实现机理.但读了<Learning Python>一书中上面这句话(尤其是goto关键字)后,忽然豁然开朗. 如果用C语言编写一个鲁棒性良

浅谈java异常[Exception]

本文转自:focusJ 一. 异常的定义 在<java编程思想>中这样定义 异常:阻止当前方法或作用域继续执行的问题.虽然java中有异常处理机制,但是要明确一点,决不应该用"正常"的态度来看待异常.绝对一点说异常就是某种意义上的错误,就是问题,它可能会导致程序失败.之所以java要提出异常处理机制,就是要告诉开发人员,你的程序出现了不正常的情况,请注意. 记得当初学习java的时候,异常总是搞不太清楚,不知道这个异常是什么意思,为什么会有这个机制?但是随着知识的积累逐渐也

PL/SQL 08 异常 exception

--PL/SQL错误  编译时  运行时 --运行时的出错处理  EXCEPTION --异常处理块DECLARE -BEGIN -EXCEPTION WHEN OTHERS THEN  handler_error(-);END; --用户自定义的异常DECLARE e_TooManyStudents EXCEPTION; -BEGIN - RAISE e_TooManyStudents; -EXCEPTION WHEN e_TooManyStudents THEN  -END; --预定义的O

异常Exception in thread &quot;AWT-EventQueue-XX&quot; java.lang.StackOverflowError

今天太背了,bug不断,检查到最后都会发现自己脑残了,粗心写错,更悲剧的是写错的时候还不提示错. 刚才有遇到一个问题,抛了这个异常Exception in thread "AWT-EventQueue-XX" java.lang.StackOverflowError XX有好几个值,我遇到了2,7,20,其实他们都是一个错,StackOverflowError,对,就是栈溢出,为什么会栈溢出呢?我遇到的问题是我写了一个方法,又自己去调用自己,造成了递归,而这个递归又停不下来,造成了栈溢

JDBC 数据库异常 Exception 关闭的(语句,连接,ResultSet)

如果在rs.next()之前关闭了Statement或PreparedStatement,会导致下面的异常: java.sql.SQLException: 关闭的语句: next 如果在rs.next()之前关闭了Connection,会导致下面的异常: java.sql.SQLException: 关闭的连接: next问题 如果在rs.next()之前关闭了ResultSet,会导致下面的异常: java.sql.SQLException: 关闭的 Resultset: next JDBC

异常-Exception in thread &quot;main&quot; net.sf.jsqlparser.parser.TokenMgrError: Lexical error at line 1, column 596. Encountered: &lt;EOF&gt; after :

1 详细异常 Exception in thread "main" net.sf.jsqlparser.parser.TokenMgrError: Lexical error at line 1, column 596. Encountered: <EOF> after : at net.sf.jsqlparser.parser.CCJSqlParserTokenManager.getNextToken(CCJSqlParserTokenManager.java:3124)

【异常】Maxwell异常 Exception in thread &quot;main&quot; net.sf.jsqlparser.parser.TokenMgrError: Lexical error at line 1, column 596. Encountered: &lt;EOF&gt; after : &quot;&quot;

1 详细异常 Exception in thread "main" net.sf.jsqlparser.parser.TokenMgrError: Lexical error at line 1, column 596. Encountered: <EOF> after : "" at net.sf.jsqlparser.parser.CCJSqlParserTokenManager.getNextToken(CCJSqlParserTokenManag

Hbase delete遇到的常见异常: Exception in thread &quot;main&quot; java.lang.UnsupportedOperationException

hbase 执行批量删除时出现错误: Exception in thread "main" java.lang.UnsupportedOperationException at java.util.AbstractList.remove(AbstractList.java:161) at org.apache.hadoop.hbase.client.HTable.delete(HTable.java:852) 这种异常其实很常见,remove操作不支持,为什么会出现不支持的情况呢?检查

异常--Exception

异常(Exception) -->java是采用面向对象的方式来处理异常的.处理过程: --抛出异常:在执行一个方法时,如果发生异常,则这个方法生成代表该异常的一个对象,停止当前执行路径,并把异常对象提交给JRE. --捕获异常:JRE得到该异常后,寻找相应的代码来处理该异常.JRE在方法的调用栈中查找,从生成异常的方法开始回溯,直到找到相应的异常处理代码为止. -->NullPointerException : 当程序访问一个空对象的成员变量或方法,访问一个空数组的成员时发生.处理方法: T