相关疑难解决方法(0)

即使从不抛出异常,使用try-catch块是否昂贵?

我们知道捕获异常是昂贵的.但是,即使从未抛出异常,在Java中使用try-catch块也是昂贵的吗?

我发现Stack Overflow问题/答案为什么尝试块昂贵?,但它适用于.NET.

java performance try-catch

181
推荐指数
7
解决办法
4万
查看次数

在Java中编写"异常驱动开发"的性能成本?

通过在Java中创建,抛出和捕获异常,是否有任何性能成本?

我计划将"异常驱动的开发"添加到一个更大的项目中.我想设计自己的异常并将它们包含在我的方法中,迫使开发人员捕获并做适当的工作.

例如,如果您有一种方法可以根据名称从数据库中获取用户.

public User getUser(String name);
Run Code Online (Sandbox Code Playgroud)

但是,用户可能为空,并且在使用用户的公共方法之前忘记检查此操作是很常见的.

User user = getUser("adam");

int age = user.getAge();
Run Code Online (Sandbox Code Playgroud)

这将导致NullPointerException和崩溃.但是,如果我在返回user-object之前进行了检查,如果它为null并抛出'UserIsNullException':

public User getUser(String name) throws UserIsNullException;
Run Code Online (Sandbox Code Playgroud)

我强迫实施者思考并采取行动:

try {

    User user = getUser("adam");

    int age = user.getAge();

}catch( UserIsNullException e) {

}
Run Code Online (Sandbox Code Playgroud)

它使代码更安全地发生意外崩溃并消除更多错误.假设该网站每小时有数百名访问者,这种设计模式几乎无处不在.

这种设计方法将如何影响性能?这些好处是否会超过成本,还是只是简单的编码?

谢谢你的帮助!

UPDATE!要清楚,我的注意力不是包装NullPointerException,正如我的例子所暗示的那样.目标是强制实施者编写一个try/catch,从而避免真正崩溃的头痛:

user == null

被遗忘了.问题涉及比较这两种设计模型:

int age;

try {

User user = getUser("adam");

age = user.getAge();

}catch( UserIsNullException e) {

age = 0;

}
Run Code Online (Sandbox Code Playgroud)

与:

int age;

User user = getUser("adam");

if( user != null ) { …
Run Code Online (Sandbox Code Playgroud)

java performance exception-handling exception overhead

14
推荐指数
6
解决办法
5969
查看次数

try catch块的成本是多少?

好多了:

 if (condition) {
  try {
   //something
  } catch(SomeEx ex) {}
 }
Run Code Online (Sandbox Code Playgroud)

而不是这个:

 try {
   if (condition) {
     //something
   }
 } catch(SomeEx ex) {}
Run Code Online (Sandbox Code Playgroud)

当我进入try块时,JVM实际上做了什么?

编辑:我不想知道在第二个例子总是进去尝试...请回答问题.

java performance try-catch

7
推荐指数
1
解决办法
2882
查看次数