⑴ java web項目把數據放入內存全局共享的方法有哪些
數據存在 Map 或 ArrayList 變數中,且變數加 static 聲明為靜態變數。這樣所用用戶訪問這個變數都是同一個對象..
⑵ Java鎬庢牱璇誨嚭鏁版嵁鍚庢案椹誨唴瀛樹腑渚誇簬浠ュ悗鐨勬暟鎹澶勭悊錛
鐢╯tatic淇楗版ゅ彉閲忥紝鑱斿悎Quartz瀹氭椂搴撳畾鏃舵洿鏂版暟鎹錛屾洿鏂版暟鎹鏃剁粰鏁版嵁鍔犻攣錛岃繖鏍峰彲浠ユ棦鑳藉仛鍒板皢鏁版嵁闀誇箙淇濆瓨鍦ㄥ唴瀛樻柟渚跨洿鎺ヨ皟鐢錛屼篃鑳戒繚鎸佹枃浠剁殑鎸佺畫鏇存柊
⑶ java如何將從資料庫取出的數據預先存入到內存
你要實現的這個可能跟SpringMvc的關系不是很大。
你要達到的目的其實就是在jvm啟動的時候把資料庫數據載入一份到內存,一個靜態變數和一個靜態初始化塊就可以搞定你的問題,這兩者都是在類載入的時候初始化一次,像前面回答的一樣,你可以用一個HashMap搞定。稍微具體來說,一個靜態變數
public static final Map<key,value> cache=new HashMap<key,value>()
static {
cache=請求資料庫操作
}
key你自己加,String還是int都行,value是你資料庫的結構,可以寫個實體。獲取的時候直接cache.get(key)就可以了。
⑷ 在Java類中 如何將一組數據寫入內存是通過構造方法嗎可以舉個例子嗎
不懂你的意思?
java不能自己直接操作內存,而且平時的操作也是jvm的內存(雖然JVM的內存來自系統RAM)。你實例化一個類 就是將數據寫入內存了
⑸ 在系統啟動時,使用java怎麼將數據載入到內存數組中
最簡單的辦法是使用靜態變數。變數設置為private的,初始化的時候給變數賦值,其版他方法權若要使用,只能通過get方法取值。這樣避免的更改內存中的數據
如:
public class Test{
private static String[] testArgs;
static init(){
給testArgs賦值...
}
public static getArgs(){
return testArgs;
}
}
⑹ java io流是將數據全部載入在內存的流對象里才開始讀的嗎
是的,但你說的不全。讀取有倆種方式,一種是直接讀取,一種是先放在緩沖流中版,再一並讀取。權內存只是個中轉站,在第一種方式中,數據是先載入在內存區,然後又被馬上被讀取出去。在第二種方式中,它會有個緩沖區,其實也就是個可以重用的內存區,它是先讀取完放在緩沖區,然後一並讀取出去!
⑺ 你好,java 向資料庫添加大量數據時內存溢出 在不改變內存的情況下如何解決 你當時是怎麼解決的
比如想將一個1000W數據的資料庫表,導出到文件;此時,你要麼進行分頁,oracle當然用三層包裝即可,mysql用limit,不過分頁每次都會新的查詢,而且隨著翻頁,會越來越慢,其實我們想拿到一個句柄,然後向下游動,編譯一部分數據(如10000行)將寫文件一次(寫文件細節不多說了,這個是最基本的),需要注意的時候每次buffer的數據,在用outputstream寫入的時候,最好flush一下,將緩沖區清空下;接下來,執行一個沒有where條件的SQL,會不會將內存撐爆?是的,這個問題我們值得去思考下,通過API發現可以對SQL進行一些操作,例如,通過:PreparedStatement statement = connection.prepareStatement(sql),這是默認得到的預編譯,還可以通過設置:PreparedStatement statement = connection.prepareStatement(sql , ResultSet.TYPE_FORWARD_ONLY , ResultSet.CONCUR_READ_ONLY);
來設置游標的方式,以至於游標不是將數據直接cache到本地內存,然後通過設置statement.setFetchSize(200);設置游標每次遍歷的大小;OK,這個其實我用過,oracle用了和沒用沒區別,因為oracle的jdbc API默認就是不會將數據cache到java的內存中的,而mysql里頭設置根本無效,我上面說了一堆廢話,呵呵,我只是想說,java提供的標准API也未必有效,很多時候要看廠商的實現機制,還有這個設置是很多網上說有效的,但是這純屬抄襲;對於oracle上面說了不用關心,他本身就不是cache到內存,所以java內存不會導致什麼問題,如果是mysql,首先必須使用5以上的版本,然後在連接參數上加上useCursorFetch=true這個參數,至於游標大小可以通過連接參數上加上:defaultFetchSize=1000來設置,例如:
jdbc:mysql://xxx.xxx.xxx.xxx:3306/abc?zeroDateTimeBehavior=convertToNull&useCursorFetch=true&defaultFetchSize=1000
上次被這個問題糾結了很久(mysql的數據老導致程序內存膨脹,並行2個直接系統就宕了),還去看了很多源碼才發現奇跡竟然在這里,最後經過mysql文檔的確認,然後進行測試,並行多個,而且數據量都是500W以上的,都不會導致內存膨脹,GC一切正常,這個問題終於完結了。
⑻ java怎麼將生成的文件放入內存
這個要使用到內存流。BufferedOutputStream或者BufferedWriter。
文件的讀取和寫入都應該會了吧?普通的流讀寫都是直接從文件中讀取或者寫入到文件中的,而內存流則是把文件中的內容寫入到電腦內存或者是從內存中讀取出來。具體的話就是把輸出流替換成BufferedOutputStream或者BufferedWriter即可