共计 1758 个字符,预计需要花费 5 分钟才能阅读完成。
在本文中,率领你学习曾经实际和失去证实的性能调整技术,它将大大地进步你的 servlet 和 jsp 页面的性能,进而晋升 J2EE 的性能。这些技术的局部用于开发阶段,例如,设计和编码阶段。另一部分技术则与配置相干。
技术 1:在 HttpServlet init() 办法中缓存数据
服务器会在创立 servlet 实例之后和 servlet 解决任何申请之前调用 servlet 的 init() 办法。该办法在 servlet 的生命周期中仅调用一次。为了进步性能,在 init() 中缓存静态数据或实现要在初始化期间实现的代价低廉的操作。例如,一个最佳实际是应用实现了 javax.sql.DataSource 接口的 JDBC 连接池。DataSource 从 JNDI 树中取得。每调用一次 SQL 就要应用 JNDI 查找 DataSource 是十分低廉的工作,而且重大影响了利用的性能。Servlet 的 init() 办法能够用于获取 DataSource 并缓存它以便之后的重用:
以下是援用片段:
public class ControllerServlet extends HttpServlet
{
private javax.sql.DataSource testDS = null;
public void init(ServletConfig config) throws ServletException
{
super.init(config);
Context ctx = null;
try
{
ctx = new InitialContext();
testDS = (javax.sql.DataSource)ctx.lookup(“jdbc/testDS”);
}
catch(NamingException ne)
{
ne.printStackTrace();
}
catch(Exception e)
{
e.printStackTrace();
}
}
public javax.sql.DataSource getTestDS()
{
return testDS;
}
…
…
}
技术 2:禁用 servlet 和 Jsp 的主动装载性能
当每次批改了 Servlet/JSP 之后,你将不得不重新启动服务器。因为主动装载性能缩小开发工夫,该性能被认为在开发阶段是十分有用的。然而,它在运行阶段是十分低廉的;servlet/JSP 因为不必要的装载,减少类装载器的累赘而造成很差的性能。同样,这会使你的利用因为已被某种类装载器装载的类不能和以后类装载器装载的类不能相互协作而呈现奇怪的抵触景象。因而,在运行环境中为了失去更好的性能,敞开 servlet/JSP 的主动装载性能。
技术 3:管制 HttpSession
许多利用须要一系列客户端的申请,因而他们能相互相关联。因为 HTTP 协定是无状态的,所以基于 Web 的利用须要负责保护这样一个叫做 session 的状态。为了反对必须保护状态的利用,Java servlet 技术提供了治理 session 和容许多种机制实现 session 的 API。HttpSession 对象表演了 session,然而应用它须要老本。无论何时 HttpSession 被应用和重写,它都由 servlet 读取。你能够通过应用上面的技术来进步性能:
在 JSP 页面中不要创立默认的 HttpSession: 默认状况下,JSP 页面创立 HttpSession。如果你在 JSP 页面中不必 HttpSession,为了节俭性能开销,应用下边的页面指令能够防止主动创立 HttpSession 对象:
以下是援用片段:
< %@ page session=”false”%>
不要将大的对象图存储在 HttpSession 中:如果你将数据当作一个大的对象图存储在 HttpSession 中,应用服务器每次将不得不解决整个 HttpSession 对象。这将迫使 Java 序列化和减少计算开销。因为序列化的开销,随着存储在 HttpSession 对象中数据对象的增大,零碎的吞吐量将会降落。
用完后开释 HttpSession:当不在应用 HttpSession 时,应用 HttpSession.invalidate() 办法使 sesion 生效。
设置超时值:一个 servlet 引擎网站监控有一个默认的超时值。如果你不删除 session 或者始终把 session 用到它超时的时候,servlet 引擎将把 session 从