java實體類實現序列化的意義

1 序列化的意義

客戶端訪問了某個能開啓會話功能的資源, web服務器就會建立一個與該客戶端對應的HttpSession對象,每一個HttpSession對象都要站用必定的內存空間。若是在某一時間段內訪問站點的用戶不少,web服務器內存中就會積累大量的HttpSession對象,消耗大量的服務器內存,即便用戶已經離開或者關閉了瀏覽器,web服務器仍要保留與之對應的HttpSession對象,在他們超時以前,一直佔用web服務器內存資源。java

web服務器一般將那些暫時不活動但未超時的HttpSession對象轉移到文件系統或數據庫中保存,服務器要使用他們時再將他們從文件系統或數據庫中裝載入內存,這種技術稱爲Session的持久化。web

將HttpSession對象保存到文件系統或數據庫中,須要採用序列化的方式將HttpSession對象中的每一個屬性對象保存到文件系統或數據庫中;將HttpSession對象從文件系統或數據庫中裝載如內存時,須要採用反序列化的方式,恢復HttpSession對象中的每一個屬性對象。因此存儲在HttpSession對象中的每一個屬性對象必須實現Serializable接口數據庫

 

2 Session的持久化的做用

  1. 提升服務器內存的利用率,保證那些暫停活動的客戶端在會話超時以前繼續原來的會話apache

  2. 在多臺web服務器協同對外提供服務的集羣系統中,使用Session的持久化技術,某臺服務器能夠將其中發生改變的Session對象複製給其餘服務器。保證了在某臺服務器中止工做後能夠由其餘服務器來接替它與客戶端的會話瀏覽器

  3. 在一個web應用程序重啓時,服務器也會持久化該應用程序中全部HttpSession對象,保證客戶端的會話活動仍能夠繼續。tomcat

 

Tomcat使用Session Manager 類來管理Session的持久化,他提供了兩個SessionManager類服務器

  • org.apache.catalina.session.StandardManagersession

  • org.apache.catalina.session.PersistentManagerspa

StandardManager是tomcat默認使用的,在web應用程序關閉時,對內存中的全部HttpSession對象進行持久化,把他們保存到文件系統中。默認的存儲文件爲對象

 

3 serialVersionUID 的做用

serialVersionUID 用來代表類的不一樣版本間的兼容性

Java的序列化機制是經過在運行時判斷類的serialVersionUID來驗證版本一致性的。在進行反序列化時,JVM會把傳來的字節流中的serialVersionUID與本地相應實體(類)的serialVersionUID進行比較,若是相同就認爲是一致的,能夠進行反序列化,不然就會出現序列化版本不一致的異常。

當實現java.io.Serializable接口的實體(類)沒有顯式地定義一個名爲serialVersionUID,類型爲long的變量時,Java序列化機制會根據編譯的class自動生成一個serialVersionUID做序列化版本比較用,這種狀況下,只有同一次編譯生成的class纔會生成相同的serialVersionUID 。

若是咱們不但願經過編譯來強制劃分軟件版本,即實現序列化接口的實體可以兼容先前版本,未做更改的類,就須要顯式地定義一個名爲serialVersionUID,類型爲long的變量,不修改這個變量值的序列化實體均可以相互進行串行化和反串行化。

相關文章
相關標籤/搜索