当我使用HttpURLConnection检查Web服务器时,Java进程内存正在增加

时间:2015-01-07 05:45:48

标签: memory httpurlconnection

我的要求是检查网络服务器是否正在侦听某个特定端口,如果没有运行,那么我需要启动该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;
}  

1 个答案:

答案 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模式。