2015-01-23 2 views
0

서블릿이 요청을 처리 한 후 가비지 수집됩니까 즉시? 아니면 따라야 할 요청을 기다리는 동안 더 오래 살아있을 수 있습니까?요청이 없으면 서블릿은 얼마나 오래 살아 있습니까?

서블릿이 즉시 죽으면 그 다음에 오는 요청은 유감입니다.

서블릿이 오래 살아 있다면 자원 낭비 일 수 있습니다.

저는 이것이 균형 문제의 대부분이라고 생각합니다. 서블릿이 유휴 상태가 된 후 얼마나 오랫동안 살아야하는지 결정/구성하는 방법이 있습니까?

+0

"live"? 서블릿은 정의상 스레드가 안전하지 않은 리소스이므로 모든 세션에서 (해당 서블릿에 대한) 모든 요청에서 공유/재사용됩니다.ServletContext 자체가 파기되거나 thres 될 때까지 웹 애플리케이션이 살아있을 때까지 살아있다. [서블릿은 어떻게 작동합니까? 인스턴스화, 세션 변수 및 다중 스레드] (http://stackoverflow.com/a/3106909/1391249). – Tiny

답변

2

처음에는 서블릿이로드되지 않습니다. 서블릿은 애플리케이션이 시작된 후 처음으로 호출을 받으면로드됩니다.

메모리에서 제거되거나 제거되지 않을 수 있습니다 (언로드 됨). 이것은 서블릿 컨테이너 (Tomcat/JBoss 등)에 따라 다릅니다.이 컨테이너는 서블릿이 메모리에 남아 있어야하는 기간을 결정합니다. 서블릿 (즉 어떤 요청이 도착하지 않음) 유휴 상태에 있으면

너무 오래 컨테이너 는 메모리에서를 언로드 할 수 있습니다.

하지만 이제 다른 요청을 언로드 한 후 Servlet에 도착한다고 말하십시오. Then 다시 컨테이너는 Servlet을 메모리에로드합니다. 그리고 이것은 WebApplication 기능에 영향을 미치지 않습니다. 모든 요청은 별도의 스레드에서 처리됩니다. 그리고 두 가지 요청은 서로 의존하지 않습니다.

작업 항목이 웹 컨테이너에 속하는 메모리에서 Servlet을 언로드하거나로드 할시기를 결정할 수 없습니다. Tomcat/Jboss/Glasssfish처럼.

그런 이유로 ServletRequestListner, ServletResponseListner와 같은 리스너가 있습니다. ServletRequestListner, ServletResponseListner는 Servlet/Request/Response Objects와 같은 이벤트가 생성되고 파기 될 때 사용자가 제어 할 수없는 이벤트를 처리 할 때 도움이됩니다.

+0

'ServletRequestListener' 클래스를 설명해 주셔서 감사합니다. – smwikipedia

1

HttpServlet을파괴가()을 GenericServlet을 형성지고을.

destroy() 메서드가 Servlet 수명주기의 끝에서 호출 중입니다.

이후 서블릿 개체가 가비지 수집 대상으로 표시됩니다.

그리고 @Oliver가 말한 것처럼 destroy 메소드를 호출하고 가비지 수집을 위해 서블릿을 표시 할시기를 결정하는 것은 컨테이너에 대한 것입니다.

서블릿을 호출하는 원인을 보려면 here을 참조하십시오. destroy() 메서드를 참조하십시오.

희망이 도움이됩니다.

관련 문제