즉, enablePooling 초기화 매개변수를 true로 잡으면 태그 인스턴스를 재활용한다는데, 실제 이 옵션을 켠 상태에서 JSP 페이지로부터 생성된 서블릿 코드는 다음과 같습니다.jsp org.apache.jasper.servlet.JspServlet logVerbosityLevel WARNING enablePooling true 3
public class foo_jsp extends HttpJspBase { private static java.util.Vector _jspx_includes; private org.apache.jasper.runtime.TagHandlerPool _jspx_tagPool_eg_foo_att3_att2_att1; private org.apache.jasper.runtime.TagHandlerPool _jspx_tagPool_eg_log; private org.apache.jasper.runtime.TagHandlerPool _jspx_tagPool_eg_log_toBrowser; public foo_jsp() { _jspx_tagPool_eg_foo_att3_att2_att1 = new org.apache.jasper.runtime.TagHandlerPool(); _jspx_tagPool_eg_log = new org.apache.jasper.runtime.TagHandlerPool(); _jspx_tagPool_eg_log_toBrowser = new org.apache.jasper.runtime.TagHandlerPool(); } public java.util.List getIncludes() { return _jspx_includes; } public void _jspDestroy() { _jspx_tagPool_eg_foo_att3_att2_att1.release(); _jspx_tagPool_eg_log.release(); _jspx_tagPool_eg_log_toBrowser.release(); }보시다 시피 태그 인스턴스가 _jspService()의 지역 변수가 아닌 JSP 서블릿 클래스의 인스턴스 필드로 할당되어, 모든 JSP 요청 스레드가 이 인스턴스 필드 태그를 공유하게 되고, 이점이 바로 기존에 스레드마다 _jspService()를 실행하면서 태그 인스턴스를 생성하여 사용하는 방식과 다른 "재활용"의 의미인 셈입니다. 그렇다면 이런 태그 인스턴스의 재활용은 과연 어떤 효과를 가져다줄까요? 이론적으로는 인스턴스의 생성 시간 단축과 메모리 절약이 떠오르는데, 이에 대해 JavaServer Pages의 저자 한스 벅스턴이 톰켓 개발자 메일링 리스트에서 논의한 메시지들이 있습니다(여기 참고). 일단 간략히 결론부터 말하면 간단한 테스트에서는 그다지 큰 성능상의 이익을 얻지는 못하지만, 앞서 언급한 원칙적 장점을 고려해본다면 실제 서비스시에는 꽤 도움이 되지 않을까 싶네요.
이전 글 : C 언어에 대한 이해 그리고 오해
다음 글 : 자바 스윙: 메뉴와 툴바 - 제 2편
최신 콘텐츠