我的要求是检查网络服务器是否正在侦听某个特定端口,如果没有运行,那么我需要启动该webservice,所以为此我使用下面的代码集。下面的代码工作正常,但问题是如果我长时间运行此代码,那么java进程内存将从60MB增加到1GB。请让我知道我在哪里做错了。
private boolean checkHttpsConnection(String urlString)
{
HttpURLConnection con = null;
try
{
URL url = new URL(urlString);
con = (HttpURLConnection)url.openConnection();
con.connect();
}
catch (Exception e)
{
LOGGER.error("some error happened ... ");
return false;
}
finally
{
if(con != null)
{
con.disconnect();
}
}
return true;
}
答案 0 :(得分:0)
调用disconnect()是不够的,必须关闭底层流。 disconnect()可以,但不一定关闭流。所以:
private boolean checkHttpsConnection(String urlString)
{
HttpURLConnection con = null;
try
{
URL url = new URL(urlString);
con = (HttpURLConnection)url.openConnection();
con.connect();
}
catch (Exception e)
{
LOGGER.error("some error happened ... ");
return false;
}
finally
{
if(con != null)
{
con.disconnect();
try
{
con.getInputStream().close();
}
catch (IOException ioe) {}
}
}
return true;
}
或者,更好的是,使用try-with-resources模式。