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

Memory 当我使用HttpURLConnection检查web服务器时,Java进程内存正在增加,memory,httpurlconnection,Memory,Httpurlconnection,我的要求是检查Web服务器是否在某个特定端口侦听,如果没有运行,则需要启动该Web服务,因此为此我使用以下代码集。下面的代码工作正常,但问题是如果我长时间运行此代码,那么java进程内存将从60MB增加到1GB。请让我知道我哪里做错了 private boolean checkHttpsConnection(String urlString) { HttpURLConnection con = null; try { URL url = new URL(u

我的要求是检查Web服务器是否在某个特定端口侦听,如果没有运行,则需要启动该Web服务,因此为此我使用以下代码集。下面的代码工作正常,但问题是如果我长时间运行此代码,那么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;
}  

仅调用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;
}  

或者,更好的方法是使用“资源试用”模式。

谢谢你,BadZen我将试用一次。好的,你必须启动一个探查器,查看哪些对象没有从堆中清除,然后。。。