【发布时间】:2013-08-19 20:15:40
【问题描述】:
最近在看tomcat服务器的频繁挂起,遇到了一些代码的某些部分频繁抛出的异常。
当我检查代码时,它看起来像这样
public static String doSomething() {
String returnVakue = "default value";
try {
ResultSet rs = getMyResultSet();
rs.first();
returnValue = rs.getString("my_field"); // Note that Exception happens at times when the ResultSet is empty
} catch (Exception e) {
throw new Exception(e);
} finally {
return returnValue;
}
}
虽然我知道同时抛出异常和返回是完全可以的,但我想知道这是否会导致 tomcat 中的任何类型的泄漏。性能是否存在任何潜在风险。 ?但是,我的调用者函数此时会停止执行。对此有何看法?对GC有影响吗?
编辑:注意:我知道如何更正此代码。请分享您的看法,这是否可能导致 tomcat 挂起。
【问题讨论】:
-
@StormeHawke 这里不会抛出异常,方法会返回returnValue,异常被丢弃。
-
@Akhil 这是实际的完整代码吗?它不会 close() ResultSet,也可能不是 JDBC 连接。这会堆积起来,最终会耗尽内存或降低数据库速度。
-
@nos 是的,我已经检查过了。我的连接管理在不同的层中处理,该层负责所有与 JDBC 相关的资源。这是一个伪代码..不是实际的。
-
@StormeHawke 正是……这就是我要提出的观点。任何人都可以清楚地定义在这种情况下会发生什么。这可以将tomcat推到无限状态吗?
-
@StormeHawke 如前所述,异常被吞没。该函数将正常返回。它将分配给调用者。这是很好定义的。参见例如stackoverflow.com/questions/5126455/…
标签: java mysql performance tomcat exception-handling