HttpSession不是Java獨有的概念
JSP
PHP
ASP都支持HttpSession
偶對
PHP還比較清楚
JSP也比較清楚
ASP沒有研究過這個問題
但估計和JSP一樣
apache httpd server本身不支持session
更多的作為一個web server
僅支持少量的SSI
CGI功能
我猜想你說的apache session大概是安裝了PHP的Apache
php的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
就一句話 System
exit(
);
你運行一下
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