Web请求后未释放对象

时间:2019-05-09 16:12:20

标签: java spring

如果遇到类似的问题,我会遇到一些奇怪的问题/行为,例如Spring ResetController请求。 由于我对Spring不太熟悉,也许很正常,我很惊讶,在收到一些POST请求后,在调用过程中创建的对象没有从内存中删除。

@RequestMapping(method = RequestMethod.POST, value = "/run2")
public String api2() {

    try {
        new ServerSocket(8887);
        return "run2";
    } catch(Exception ex) {
        return "run2nok";
    }
}

据我了解,每次我调用new ServerSocket(8887)时,只要不使用该端口,便可以绑定该端口。据我所知,这个短代码的生命周期应该在返回之后结束。

但是,当我进行第二次POST调用时,它无法绑定到端口,并且通过签入CMD netstat | findstr: 8887被使用。 但是,如果我呼叫System.gc(),则该端口将被释放,并且可以根据需要进行第二次POST。

那么,请求结束后,该对象是否仍在正常使用?还是我需要做一些事情来释放端口?

1 个答案:

答案 0 :(得分:3)

您永远不应该依赖于及时进行自动清理的东西-它可能立即发生,以后发生或永远不会发生(甚至无法保证会响应System.gc()发生)。

如果需要清理,请明确进行清理(例如,通过finally或使用try-with-resources)。