如何写出高性能的JSP和Servlet


Posted in 面试题 onJanuary 22, 2013
最小化servlet中的java 同步。
不要用servlet的单线程模式。
使用servlet的init()方法进行一些昂贵的一次性的初始化。
避免使用System.out.pintln()调用。
避免使用共享的可修改的类变量
在servlet的多线程模式中(缺省情况下),一个应用服务器实例只有一个的servlet实例,这个servlet的所有请求都共享同一个 servlet实例,如果在servlet内有同步代码块的话会造成线程争夺,因为servlet的类变量创建需要同步,所以要避免使用共享的可修改的类 变量。
HTTP Session处理
使用HTTP Session的时候请遵守一下规则:
不要随意创建Session, Session的创建不是免费的。如果不需要就不要创建
如果session不需要了请使用javax.servlet.http.HttpSession.invalidate()来释放session
保证session小型化可以减少反应时间,如果可能的话,请保证session小于7K。
在JSP里面使用指令来避免应用服务器自动在不需要的时候创建session.
避免session中存放大的对象,这样会强制序列化和增加过度计算,通常情况下不要存放大的对象到session里面。
不要缓存事务数据到HttpSession里面,访问HttpSession里面的数据是非事务的,最好把这些数据存放在数据库或者用实体 Bean访问,事务如果失败会恢复到它原来的状态,不过,这些失效的或者不再精确的数据会继续存放在session里面。应用服务器提供了只读的bean 管理器去缓存这些只读的数据。
配置和部署技巧
为了提高类的载入时间,避免在服务器的CLASSPATH里面使用过多的目录,把跟应用有关的类发放到jar文件里面。
HTTP反应时间跟HTTP server调整有很大关系。
如果可能,请缓存servlet的结果。
如果一个应用不含任何JEB,把应用部署成war文件,不要部署成ear文件。
禁用Security Manager
Security manager是非常昂贵的,因为在调用需要的资源的时候必须要调用doPrivileged()方法而且还必须要检测server.policy里面的 资源。如果你确信你的服务器没有恶意的代码而且你也不使用用户认证,你就可以禁用secrity manager.

Tags in this post...

面试题 相关文章推荐
普通PHP程序员笔试题
Jan 01 面试题
SQL中where和having的区别
Jun 17 面试题
不开辟用于交换数据的临时空间,如何完成字符串的逆序
Dec 02 面试题
采用怎样的方法保证数据的完整性
Dec 02 面试题
广州盈通面试题
Dec 05 面试题
.NET是怎么支持多种语言的
Feb 24 面试题
名词解释型面试题(主要是网络)
Dec 27 面试题
C# .NET面试题
Nov 28 面试题
什么是规则表达式
May 03 面试题
什么是lambda函数
Sep 17 面试题
介绍一下如何优化MySql
Dec 20 面试题
如何现实servlet的单线程模式
Aug 05 面试题
宝信软件JAVA工程师面试经历
Aug 19 #面试题
Linux中如何设置Java环境变量(Ubuntu)
Jul 24 #面试题
线程的基本概念、线程的基本状态以及状态之间的关系
Oct 26 #面试题
用JAVA SOCKET编程,读服务器几个字符,再写入本地显示
Nov 25 #面试题
解释一下ArrayList Vector和LinkedList的实现和区别
Apr 26 #面试题
描述一下JVM加载class文件的原理机制
Dec 08 #面试题
解释一下抽象方法和抽象类
Aug 27 #面试题
You might like
使用PHPMailer实现邮件发送代码分享
2014/10/23 PHP
PHP和C#可共用的可逆加密算法详解
2015/10/26 PHP
使用phpstorm和xdebug实现远程调试的方法
2015/12/29 PHP
Twig模板引擎用法入门教程
2016/01/20 PHP
php页面跳转session cookie丢失导致不能登录等问题的解决方法
2016/12/12 PHP
php读取出一个文件夹及其子文件夹下所有文件的方法示例
2017/06/15 PHP
Phpstorm+Xdebug断点调试PHP的方法
2018/05/14 PHP
PHP 数组黑名单/白名单实例代码详解
2019/06/04 PHP
php设计模式之原型模式分析【星际争霸游戏案例】
2020/03/23 PHP
TNC vs BOOM BO3 第一场2.13
2021/03/10 DOTA
JavaScript更改class和id的方法
2008/10/10 Javascript
简单通用的JS滑动门代码
2008/12/19 Javascript
jqGrid日期格式的判断示例代码(开始日期与结束日期)
2013/11/08 Javascript
qq悬浮代码(兼容各个浏览器)
2014/01/29 Javascript
JS遍历页面所有对象属性及实现方法
2016/08/01 Javascript
浅谈js中的三种继承方式及其优缺点
2016/08/10 Javascript
利用Query+bootstrap和js两种方式实现日期选择器
2017/01/10 Javascript
JavaScript+Canvas实现彩色图片转换成黑白图片的方法分析
2018/07/31 Javascript
js限制input只能输入有效的数字(第一个不能是小数点)
2018/09/28 Javascript
详解Vue项目引入CreateJS的方法(亲测可用)
2019/05/30 Javascript
[03:36]DOTA2完美大师赛coL战队趣味视频——我演你猜
2017/11/23 DOTA
Python实现从URL地址提取文件名的方法
2015/05/15 Python
Python中Iterator迭代器的使用杂谈
2016/06/20 Python
在Python中如何传递任意数量的实参的示例代码
2019/03/21 Python
对PyQt5中树结构的实现方法详解
2019/06/17 Python
pytorch 实现模型不同层设置不同的学习率方式
2020/01/06 Python
python实现二分类和多分类的ROC曲线教程
2020/06/15 Python
CSS3中Transform动画属性用法详解
2016/07/04 HTML / CSS
微软美国官方网站:Microsoft美国
2018/05/10 全球购物
请用用Java代码写一个堆栈
2012/01/26 面试题
《理想的风筝》教学反思
2014/04/11 职场文书
慈善捐赠倡议书
2014/08/30 职场文书
MySQL 角色(role)功能介绍
2021/04/24 MySQL
MySQL窗口函数的具体使用
2021/11/17 MySQL
pytorch分类模型绘制混淆矩阵以及可视化详解
2022/04/07 Python
MySQL去除密码登录告警的方法
2022/04/20 MySQL