`
z75148885
  • 浏览: 191523 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论
阅读更多

面试中曾经问不少面试者,很多新手喜欢把各种数据,不关是否共有,都放session,传到下一个页面,这样的话,访问量一大,很可能系统就挂了,
application也一样,不能对内存进行有效的管理,未了防止系统崩溃,同时也要提高查询效率,可以用java的HashMap进行管理,同时对放入其中的
长度进行限制,最早放进去的最先被删除。
查看 http://blog.csdn.net/alexjjf/archive/2006/10/27/1353372.aspx 中的做法,把其中的对象换成Object即可,也可用一些开源的cache组件,swarmCache,osCache,在这把这些概念阐述一下.

Session Session状态是在客户登录的时候创建的,它保存了客户特定的信息,并以Session ID来标识。当一个新客户访问应用程序时,先生成一个新的Session ID(或是Session Key),并为同一个客户接下来的请求创建联系。
但是Session和客户端的Cookie是有关的,当客户关掉Cookie时,Session就失效了
由于Cookie存储的信息是放到客户端的,用户在访问服务器端页面时,必然在客户端和服务器端之间频繁交换信息,影响了程序的性能。而Session由于存储在服务器内存中,因此不存在这个问题。不过,Session存储的信息是临时的,用户一旦关闭浏览器,状态即失去。而Cookie则相反。
Application状态为应用程序提供了一个全局的状态。所有客户都可以使用该状态。从设计的角度来说,我们通常用Application来存储一些标准的数据。同时,我们在使用它时要注意避免性能的降低,存储的数据尽可能提供给客户只读的功能。
由于Application状态对于所有客户都是共享的,如果客户只是读取该数据,则没有什么问题,一旦要进行写操作,就不能保证线程的安全以及出现同步争用的问题

Application、Session和Cookie,可以借用Carfield的总结:

COOKIE 是本地文件,是 40 大盗在阿里巴巴家做的记号,或者是送牛奶的人在你家门口钉的箱子。

SESSION 是服务器端内存,是你洗澡时浴池发给你的钥匙。自己专用,可以开自己的好多箱子。

APPLICATION 是公共浴池。在这里能看见所有人,包括 ppmm 哦:)。

application和session比较简单,这里主要说明request和page的作用范围。
application:全局作用范围,整个应用程序共享,就是在部署文件中的同一个webApp共享,生命周期为:应用程序启动到停止。
session:会话作用域,当用户首次访问时,产生一个新的会话,以后服务器就可以记住这个会话状态。生命周期:会话超时,或者服务器端强制使会话失效。
request:请求作用域,就是客户端的一次请求。
page:一个JSP页面。
以上作用范围使越来越小, request和page的生命周期都是短暂的,他们之间的区别就是:一个request可以包含多个page页(include,forward以及filter)。举个简单的例子:
jsp1.jsp
<jsp:useBean id="beanID" class="xxx .xxx.BeanClass" scope="request" />
<jsp:include page="jsp2.jsp" />
jsp2.jsp
<jsp:getProperty name="beanID" property="sample" />
运行jsp1.jsp可以正常显示数据,因为作用范围是request,相当于调用了request.setAttribute()方法,
jsp2页通过request.getAttribute来获得这个bean.如果把request改为page,就会抛出NullPointerExceptioin.
一个请求可以跨好几个JSP(include和forword)和Servlet(如filter).不过这里有一个需要注意的就是区别
<jsp:include> 和<%@ include %>.如果上面的<jsp:include page="jsp2.jsp" />改为<%@ include file="jsp2.jsp" %>,即使scope为page也是正确的,<%@ include %>是编译时包含,<jsp:include>是运行时包含.前者就相当于宏,编译时替代,后者相当于函数,运行时返回.

分享到:
评论

相关推荐

    胡凯 - Android内存优化之5R法则

    在Android开发中,内存优化始终是开发者面临的一大挑战。特别是随着移动设备性能的提升和应用功能的增加,如何有效地管理内存使用成为提升应用性能的关键。根据胡凯在MDCC 2015中国移动开发者大会上的演讲内容,我们...

    内存整理小程序

    需要注意的是,虽然内存整理工具在某些情况下能提供帮助,但现代操作系统如Windows已经具备了一定的内存管理能力,能够自我优化内存分配。频繁使用内存整理工具可能并不总是必要的,过度依赖这些工具反而可能导致...

    内存READWRITE,内存不足怎么清理手机,C,C++源码.zip

    4. **使用内存优化工具**:许多手机系统和第三方应用提供内存优化功能,自动释放内存,提升设备性能。 5. **定期重启手机**:重启设备可以清理内存中的残留进程,恢复系统到初始状态。 在C和C++中,避免内存问题的...

    Linux内核中内存池的实现及应用1

    通过使用内存池,可以显著减少内存碎片,提高系统响应速度,并有助于预防内存泄露,因为内存池的内存只能由其创建者释放,降低了内存误用的风险。 总结来说,Linux内核的内存池是内存管理优化的重要手段,尤其适用...

    内存整理大师内存整理大师

    总之,内存整理大师作为一款工具,可以帮助用户改善电脑性能,但用户也需了解其工作原理和适用场景,避免过度依赖或者误用。同时,保持良好的计算机使用习惯,如定期清理无用文件、关闭不使用的后台程序,也是提升...

    Linux 2.6内存保护机制研究.pdf

    Linux 2.6 内存保护机制是操作系统安全的关键组成部分,尤其对于军事和信息安全领域具有重要意义。...通过对内存保护机制的深入研究和优化,可以更有效地防范病毒和恶意软件,保障系统的正常运行和信息的安全。

    SAC内存GE迷恋修改器

    【SAC内存GE迷恋修改器】是一款专为游戏爱好者设计的工具,它主要用于修改游戏中的某些特定数据,以实现个性化的游戏体验。在游戏优化、调整难度或是探索不同游戏路径时,这样的修改...误用,则可能带来不必要的麻烦。

    内存释放专家 1.21memempty

    3. **优化分配**:释放后的内存空间会被重新分配给需要大量内存的程序,提升其运行效率。 4. **性能监控**:软件可能还配备了实时的内存使用情况监控,用户可以直观地看到内存释放前后的变化,以及系统整体的内存...

    内存监测工具[可用作单机游戏修改]附带教程【绿色汉化版】

    内存监测工具,通常被用于分析和修改应用程序的内存状态,以实现各种目的,例如游戏修改、性能优化或者软件调试。本资源包含一个名为"Cheat Engine"的内存监测工具的绿色汉化版,以及原版程序,同时附带了一个教学...

    C语言的内存分配.pdf

    在C语言中,内存管理是编程过程中的核心...通过合理的内存分配和释放策略,可以优化程序性能,减少资源消耗,避免潜在的运行时错误。在实际开发中,应结合具体应用场景选择合适的内存管理方法,以实现最佳的程序设计。

    记一次典型的因应用使用内存不合理而频发的性能问题

    在描述中虽然没有具体信息,但通常这类问题可能涉及内存泄漏、过度分配、数据结构设计不当或垃圾回收机制的误用。内存泄漏是指程序在申请内存后,无法释放已不再使用的内存空间,导致系统可用内存逐渐减少。过度分配...

    oracle分析优化工具 sqlhc

    1. **执行计划分析**:SQLHC能够生成并比较不同版本SQL语句的执行计划,帮助识别不理想的访问路径和操作符,如全表扫描、索引误用等。 2. **性能监控**:工具可以追踪SQL语句的执行时间、CPU使用、I/O操作等性能...

    关于java内存泄露问题解决

    2. **静态集合类的误用**:当静态变量或常量引用了集合类(如List、Set、Map等),且这些集合中包含的对象生命周期超出预期时,即使集合外部的对象引用已经消失,GC也无法回收这些对象,造成内存泄露。 3. **监听器...

    系统清理优化工具

    它们可以分析系统的硬件配置,并根据分析结果调整内存分配、CPU优先级等,以最大化运行效率。 5. **隐私保护**:部分清理优化工具包含了隐私保护功能,如清除浏览历史、删除聊天记录等,确保用户的个人数据不被泄露...

    java 内存泄露

    6. **定期进行性能测试**: 通过压力测试发现潜在的内存问题,提前进行优化。 总之,理解Java内存管理机制,遵循良好的编程实践,结合工具进行监控和分析,是防止和解决Java内存泄露的关键。开发者应当重视这个问题...

    hibernate优化前的程序

    延时加载的误用**:不合理的延时加载可能导致“懒加载地狱”,即在不期望的时候触发大量数据库请求。评估业务需求,合理设置加载策略,如使用“eager loading”代替“lazy loading”。 **4. 数据库连接管理**:...

    Linux 内存管理导读-三级页表-伙伴系统

    ### Linux内存管理详解:三级页表与伙伴系统 #### 存储层次结构及原因 Linux内存管理系统的设计基于存储层次的概念,这一...通过深入理解这些概念和技术,我们可以更好地理解和优化Linux操作系统中的内存管理机制。

    Reference Profiler.7z

    阅读这份文档能帮助开发者更熟练地掌握内存优化技巧,避免因误用导致的性能问题。 四、UnityHeapExplorer-master.zip、pschraut-unityheapexplorer-80269477ecc9.zip 这两个zip文件可能包含了第三方开发的Heap ...

    Android应用源码之优化增强的缓存机制(SimpleCache).zip

    开发者可以在应用启动时或者特定条件下清除缓存,以避免旧数据的误用。同时,SimpleCache支持异步操作,能够在不影响主线程的情况下进行缓存的读写,保证了应用的流畅性。 总之,理解并熟练运用SimpleCache可以帮助...

    linux内存检测、线程调试工具valgrint 使用手册

    - **Massif**:专注于内存使用情况的分析,可以提供程序运行过程中内存使用的变化趋势,对于优化程序内存占用非常有帮助。 #### 常见问题解答 Valgrind的FAQ部分覆盖了一些常见问题及其解决方案,比如如何解决...

Global site tag (gtag.js) - Google Analytics