robbin 的 HttpSession 總結_電腦知識網
熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Javascript >> 正文

robbin 的 HttpSession 總結

2013-11-12 23:36:50  來源: Javascript 

  HttpSession不是Java獨有的概念JSPPHPASP都支持HttpSession偶對PHP還比較清楚JSP也比較清楚ASP沒有研究過這個問題但估計和JSP一樣
  
  apache httpd server本身不支持session更多的作為一個web server僅支持少量的SSICGI功能我猜想你說的apache session大概是安裝了PHP的Apachephp的session確實是每次都要在apache的臨時目錄建了session文件這有一定的緣故由於不像JSP有一個JVM專門開辟了一個內存區同時傳統的apache在unix是進程模型進程間通訊比較困難對於進程間共享session的問題就是采取保存在硬盤上的辦法只不過unix上的apache的IO效率特別高基本上不會有多少性能損失這就是你看到apache臨時目錄裡面有很多session文件的原因
  
  對於JSP來說在非集群環境下session是保存在JVM開辟的內存裡面的那麼究竟是否會使用某些算法例如LRU算法將不常用的session鈍化在硬盤上呢?由於每個App Server實現不同我也不敢下斷言但是就普遍情況而言是不會鈍化在硬盤上的不論是Tomcat還是Weblogic都是如此其實這個問題很容易就可以想清楚session對象如果能夠鈍化在硬盤上必須實現序列化接口如果App Server沒有要求你必須把所有session對象實現序列化接口的化就意味著肯定不會鈍化到硬盤上否則App Server一鈍化就很有可能報無法序列化的錯誤
  
  因此session絕對不應該設為永遠不過期實際上App Server也不會允許你這麼做就是你在程序裡面這麼設也不起作用
  
  由於大量session占用過多JVM內存導致JVM報告OutOfMemory的錯誤這是一個很常見的現象不管是多牛的App Server一樣會中招!絕不會有例外也許某些人說這麼容易中招的App Server還能在市場上混下去嗎?
  
  拿weblogic來說吧你寫一個JSP就一句話 Systemexit();你運行一下Weblogic Server馬上關閉換了任何App Server都得中招只有一個例外就是Resin因為resin很狡猾用一個腳本不斷監視一旦發現App Server down掉立刻重起所以Resin也不是不中招而是中招以後立刻重起罷了
  
  因此程序帶來的性能問題不管多好的App Server都架不住你說JRun可以鈍化到硬盤上我相信肯定有一個前提就是所有的session對象都必須可序列化否則也根本無法鈍化
From:http://tw.wingwit.com/Article/program/Java/Javascript/201311/11137.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.