標籤:
概述
對於程式員來說,聽到緩衝,一定會非常的亢奮,因為這年代,你去找工作,說不知道緩衝,沒用過緩衝,都不好意思說自己是程式員,所以說緩衝時一個非常熱的話題,今天就講一下自己關於緩衝的理解,希望對於對大家有相應的協助。
緩衝概念 學習一個東西,我們首先應該清楚他是什麼,那麼,緩衝到底是什麼呢?緩衝就是記憶體裡面用於存放資料的空間,即,緩衝就是記憶體。緩衝的目的是什麼呢?緩衝就是為了最佳化程式查詢IO資料,將程式經常從IO中查詢的資料,儲存到記憶體中,使程式直接操作記憶體即可獲得資料,最佳化了程式等待IO資料的時間。
緩衝的分類 緩衝的分類可以有多種,這裡講的是以程式為中心進行劃分的,緩衝可分為:線程級緩衝,進程級緩衝,進程外緩衝。 線程級緩衝的生命週期是運行程式的一個線程的生命週期,jdk提供了相應的類,即ThreadLocal<T>。 進程級緩衝的組建循環是運行程式的生命週期,程式啟動就存在,程式停止,則快取資料消失,這個sun公司沒有提供相應的具體實現,不過,第三方提供了很多這樣的架構,如:ehcache,oscache。 進程外緩衝的生命週期是快取服務器的生命週期,它的生命週期完全獨立應用程式的,即使我們的應用程式停止運行了,只要我們的快取服務器換運行者,那麼,快取資料就不會丟失,我們的程式再啟動後,仍可以使用相應的快取資料,現在快取服務器也有很多,如:redis,memcached
緩衝和對象池的區別 對象池這個概念相應大家不陌生,如果你做過和資料庫互動的項目,一定會用到的,那就是jdbc的串連池,即資料庫的串連池,常用的資料庫連接的串連池架構有:c3p0,dbcp,proxool,druid,tomcat等伺服器提供的串連池,對於這部分的內容大家可以看這篇部落格:JDBC資料庫連接池 上面以資料庫連接池簡單的說了一下池的概念,從上面,我們可以知道,對象池也是存放對象的記憶體,緩衝也是,那麼,為什麼還要其來個不同的名字呢?這是因為這兩個雖然在具體形式上一樣,但是,其本質是不一樣。 緩衝存的對象都是輕量級的,一般都是資料對象,並且,這些對象是不同的,而對象池中的對象一般都是操作對象,重量級對象,並且都是相同的,之前沒有搞懂緩衝的對象怎麼是不同的呢,後來想明白了,緩衝中的資料是不同的,這個不同不是說他們的類型或者引用地址是不同的,而是說對象裡面的資料是不同的。
java緩衝和.net緩衝
之前學習.net的時候,也學習過這塊的內容,所以,在學習java的過程中,思想方面是沒有什麼問題的,主要的一些問題是在實現上,因為,在.net平台上,微軟做了很好的整合,其提供了很多方面的緩衝,如:頁面緩衝(局部,全部),線程緩衝,進程緩衝,以及進程外session緩衝,都提供了相應的實現,我們只需要調用就行了,不要引入太多第三方的東西,但是,在java這塊,動不動就需要引用第三方的東西,所以,在剛開始學習java的這塊內容的時候,有點不太習慣,造成這個的因為是,.net是不開源的,java是開源的,當然,開源有開源帶來的問題,不開源也有不開源的好處,再次不做評論。關於.net緩衝的東西,大家可以查看我之前的部落格。
總結 關於緩衝,我們可以使用第三方的架構,也可自訂緩衝,不論哪個層級的緩衝,我們都可以自訂實現,之後的幾篇部落格,直接使用這些架構,做相應的demo。
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
java緩衝(1、概述)