java优秀代码片段 java优雅代码( 四 )


for (val = 0; val100000; val += 5) {
alterX = val3; myResult = val1;
}
修改后的代码不再做乘以8的操作,而是改用等价的左移3位操作 , 每左移1位相当于乘以2 。相应地,右移1位操作相当于除以2 。值得一提的是,虽然移位操作速度快,但可能使代码比较难于理解,所以最好加上一些注释 。
19、在JSP页面中关闭无用的会话 。
一个常见的误解是以为session在有客户端访问时就被创建,然而事实是直到某server端程序调用HttpServletRequest.getSession(true)这样的语句时才被创建,注意如果JSP没有显示的使用 %@pagesession="false"% 关闭session,则JSP文件在编译成Servlet时将会自动加上这样一条语句HttpSession
session = HttpServletRequest.getSession(true);这也是JSP中隐含的session对象的来历 。由于session会消耗内存资源 , 因此,如果不打算使用session,应该在所有的JSP中关闭它 。
对于那些无需跟踪会话状态的页面,关闭自动创建的会话可以节省一些资源 。使用如下page指令:%@ page session="false"%
20、JDBC与I/O
如果应用程序需要访问一个规模很大的数据集,则应当考虑使用块提取方式 。默认情况下,JDBC每次提取32行数据 。举例来说,假设我们要遍历一个5000行的记录集,JDBC必须调用数据库157次才能提取到全部数据 。如果把块大小改成512,则调用数据库的次数将减少到10次 。
[p][/p]21、Servlet与内存使用
许多开发者随意地把大量信息保存到用户会话之中 。一些时候,保存在会话中的对象没有及时地被垃圾回收机制回收 。从性能上看,典型的症状是用户感到系统周期性地变慢,却又不能把原因归于任何一个具体的组件 。如果监视JVM的堆空间,它的表现是内存占用不正常地大起大落 。
解决这类内存问题主要有二种办法 。第一种办法是,在所有作用范围为会话的Bean中实现HttpSessionBindingListener接口 。这样,只要实现valueUnbound()方法,就可以显式地释放Bean使用的资源 。另外一种办法就是尽快地把会话作废 。大多数应用服务器都有设置会话作废间隔时间的选项 。另外,也可以用编程的方式调用会话的setMaxInactiveInterval()方法,该方法用来设定在作废会话之前,Servlet容器允许的客户请求的最大间隔时间,以秒计 。
22、使用缓冲标记
一些应用服务器加入了面向JSP的缓冲标记功能 。例如,BEA的WebLogic Server从6.0版本开始支持这个功能,Open
Symphony工程也同样支持这个功能 。JSP缓冲标记既能够缓冲页面片断,也能够缓冲整个页面 。当JSP页面执行时,如果目标片断已经在缓冲之中,则生成该片断的代码就不用再执行 。页面级缓冲捕获对指定URL的请求 , 并缓冲整个结果页面 。对于购物篮、目录以及门户网站的主页来说,这个功能极其有用 。对于这类应用,页面级缓冲能够保存页面执行的结果,供后继请求使用 。
23、选择合适的引用机制
在典型的JSP应用系统中,页头、页脚部分往往被抽取出来,然后根据需要引入页头、页脚 。当前,在JSP页面中引入外部资源的方法主要有两种:include指令,以及include动作 。
include指令:例如%@ include file="copyright.html"
% 。该指令在编译时引入指定的资源 。在编译之前,带有include指令的页面和指定的资源被合并成一个文件 。被引用的外部资源在编译时就确定,比运行时才确定资源更高效 。
include动作:例如jsp:include page="copyright.jsp"
/ 。该动作引入指定页面执行后生成的结果 。由于它在运行时完成,因此对输出结果的控制更加灵活 。但时,只有当被引用的内容频繁地改变时 , 或者在对主页面的请求没有出现之前,被引用的页面无法确定时,使用include动作才合算 。

推荐阅读