我有套接字应用程序,其代码片段如下。我已确保套接字在finally block 中关闭。我猜我昨天或前天刚刚进行了一次 Full GC。然后我通过jmap比较这次FGC之前和今天FGC之后的套接字实例,但实例没有减少而是不断增加?可能是什么原因或者引用 jmap 是错误的?另一件事是,在完整GC之后,老一代不会变成0?
BoneCP connectionPool = null;
class ConnectionHandler implements Runnable {
Connection dbconn = null;
public void run() { // etc
BufferedWriter writeBuffer = null;
BufferedReader readBuffer = null;
String capturedMessage="";
try{
dbconn = connectionPool.getConnection();
dbconn.setAutoCommit(false);
while ((nextChar=readBuffer.read()) != -1){
capturedMessage += (char) nextChar;
if (nextChar == '*'){
try{
///For select we do this
Statement stmt2 = null;
stmt2 = dbconn.createStatement();
String selectQuery2= .........
ResultSet rs2 = stmt2.executeQuery(selectQuery2);
if(rs2.next()){
}
try{
if ( rs2!= null ){
rs2.close();
} else{
System.out.println("No rs2 exist");
}
if ( stmt2!= null ){
stmt2.close();
} else{
System.out.println("No stm2 exist");
}
}catch(SQLException ex)
{
System.out.println("SQLException has been caught for stmt2");
ex.printStackTrace(System.out);
}
funct1();
funct2();
dbconn.commit
}
catch (SQLException ex){
ex.printStackTrace(System.out);
try{
dbconn.rollback();
}
catch (Exception rollback){
rollback.printStackTrace(System.out);
}
}
catch (Exception e){
e.printStackTrace(System.out);
try{
dbconn.rollback();
}
catch (Exception rollback){
rollback.printStackTrace(System.out);
}
}
finally{
}
}
catch (SocketTimeoutException ex){
ex.printStackTrace();
}
catch (IOException ex){
ex.printStackTrace();
}
catch (Exception ex){
ex.printStackTrace(System.out);
}
finally{
try{
if ( dbconn != null ){
dbconn.close();
}
else{
System.out.println("dbConn is null in finally close");
}
}
catch(SQLException ex){
ex.printStackTrace();
}
try{
if ( writeBuffer != null ){
writeBuffer.close();
}
else{
System.out.println("writeBuffer is null in finally close");
}
}
catch(IOException ex){
ex.printStackTrace(System.out);
}
}
}
最佳答案
我看到您正在使用 BoneCP - 我也是。我在 BoneCP 中发现了一个错误,这使得我的应用程序打开了太多连接。我不确定我到底是如何修复它的,我基本上用了我能想到的所有方法来解决这个问题,而且我不确定哪些更改修复了它,但升级到最新的 BoneCP 快照可能会有所帮助。
关于java - Full GC后socket实例还在继续增长吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20312739/