java內存緩存
1、TreeCache / JBossCache
JBossCache是一個復制的事務處理緩存,它允許你緩存企業級應用數據來更好的改善性能。緩存數據被自動復制,讓你輕松進行JBoss伺服器之間 的集群工作。JBossCache能夠通過JBoss應用服務或其他J2EE容器來運行一個MBean服務,當然,它也能獨立運行。
2、WhirlyCache
Whirlycache是一個快速的、可配置的、存在於內存中的對象的緩存。它能夠通過緩存對象來加快網站或應用程序的速度,否則就必須通過查詢資料庫或其他代價較高的處理程序來建立。
3、SwarmCache
SwarmCache是一個簡單且有效的分布式緩存,它使用IP multicast與同一個區域網的其他主機進行通訊,是特別為集群和數據驅動web應用程序而設計的。SwarmCache能夠讓典型的讀操作大大超過寫操作的這類應用提供更好的性能支持。
4、JCache
JCache是個開源程序,正在努力成為JSR-107開源規范,JSR-107規范已經很多年沒改變了。這個版本仍然是構建在最初的功能定義上。
5、ShiftOne
ShiftOne Java Object Cache是一個執行一系列嚴格的對象緩存策略的Java lib,就像一個輕量級的配置緩存工作狀態的框架。
㈡ java 怎麼把數據存到內存中
這里你採納與否沒關系,給你說說編程與內存的關系。
你定義的任何變數,常量,類,方法等等,其實都在內存中,沒有所謂的把數據存內存中,這概念,你可以想一下電腦重啟或關機後,內存中的所有數據,都會丟失,除非你保存到磁碟中去。
在內存中的數據有兩塊,第一、緩沖,一般寫數據到磁碟的時候開辟出來的內存空間;第二、緩存,一般是從磁碟讀數據到內存中開辟出來的內存空間。會這么使用,原因很簡單,磁碟讀寫數據速度與內存不一致(磁碟的存取效率遠遠小於內存的存取效率),為了提高數據的存取效率,才會這么乾的。
一般而言,java中的所謂數據,大部分都是類,從自動引用計數的概念來分析,你想把對象長久的放在內存中,不會被垃圾回收機制釋放,注意制葯有一個對象在使用/引用你的數據,這條數據就會存在內存中。所以,想servlet中的全局配置參數,隨時可以取到還是唯一一份,你可以參考一下。
另外內存使用分堆與棧,堆在面向對象編程中存儲對象的,棧是方法或函數執行的時候臨時開辟的存儲空間,方法或函數執行完畢就會釋放。
希望我的回復能幫助到你,採納與否沒關系。有更好的答案,我就隱藏我的回復。
㈢ java緩存
緩存有2部分,1客戶端緩存,
2伺服器端緩存
你說的是客戶端緩存,jquery主要是利用js進行緩存的,也就是cookie
學java吧,給我email我指點你 [email protected]
㈣ 使用java實現以個簡單的緩存機制
你這個分數太少了吧,程序到是有,不過給你有點可惜
CacheMgr.java
import java.util.*;
import cn.javass.framework.cache.vo.CacheConfModel;
public class CacheMgr {
private static Map cacheMap = new HashMap();
private static Map cacheConfMap = new HashMap();
private CacheMgr(){
}
private static CacheMgr cm = null;
public static CacheMgr getInstance(){
if(cm==null){
cm = new CacheMgr();
Thread t = new ClearCache();
t.start();
}
return cm;
}
/**
* 增加緩存
* @param key
* @param value
* @param ccm 緩存對象
* @return
*/
public boolean addCache(Object key,Object value,CacheConfModel ccm){
boolean flag = false;
cacheMap.put(key, value);
cacheConfMap.put(key, ccm);
System.out.println("now addcache=="+cacheMap.size());
return true;
}
/**
* 刪除緩存
* @param key
* @return
*/
public boolean removeCache(Object key){
cacheMap.remove(key);
cacheConfMap.remove(key);
System.out.println("now removeCache=="+cacheMap.size());
return true;
}
/**
* 清除緩存的類
* @author wanglj
* 繼承Thread線程類
*/
private static class ClearCache extends Thread{
public void run(){
while(true){
Set tempSet = new HashSet();
Set set = cacheConfMap.keySet();
Iterator it = set.iterator();
while(it.hasNext()){
Object key = it.next();
CacheConfModel ccm = (CacheConfModel)cacheConfMap.get(key);
//比較是否需要清除
if(!ccm.isForever()){
if((new Date().getTime()-ccm.getBeginTime())>= ccm.getDurableTime()*60*1000){
//可以清除,先記錄下來
tempSet.add(key);
}
}
}
//真正清除
Iterator tempIt = tempSet.iterator();
while(tempIt.hasNext()){
Object key = tempIt.next();
cacheMap.remove(key);
cacheConfMap.remove(key);
}
System.out.println("now thread================>"+cacheMap.size());
//休息
try {
Thread.sleep(60*1000L);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
CacheConfModel.java
public class CacheConfModel implements java.io.Serializable{
private long beginTime;
private boolean isForever = false;
private int rableTime;
public long getBeginTime() {
return beginTime;
}
public void setBeginTime(long beginTime) {
this.beginTime = beginTime;
}
public boolean isForever() {
return isForever;
}
public void setForever(boolean isForever) {
this.isForever = isForever;
}
public int getDurableTime() {
return rableTime;
}
public void setDurableTime(int rableTime) {
this.rableTime = rableTime;
}
}
順便說一句,緩存的管理不是靠時間久來計算的,是靠最大不活動間隔計算的,你的設計思想有問題
㈤ Java編程測試1M內存可用來緩存多少對象
為了提高系統的響應 性能 ,一般都會採用緩存技術來實現,如果用象ehcache、oscache這樣的 開源 的cache工具來實現,一般都需要由 開發 人員來設置maxElementsInMemory這個值,但這個值在設置的時候大家都是怎麼去設置的呢?憑想像還是隨便寫一個值呢?
為了提高系統的響應性能,一般都會採用緩存技術來實現,如果用象ehcache、oscache這樣的開源的cache工具來實現,一般都需要由開發人員來設置maxElementsInMemory這個值,但這個值在設置的時候大家都是怎麼去設置的呢?憑想像還是隨便寫一個值呢?這個值設的過大嘛有可能會造成outofmemory,設的過小嘛又浪費伺服器巨大的內存,為了能夠更好的設置這個值,我寫了個測試程序來估算1M內存能夠緩存多少個對象,代碼如下:
clearcase/" target="_blank" >cccccc width="90%" align=center bgColor=#e3e3e3 border=1>
public void testSpike(){
print("最大的內存為:"+Runtime.getRuntime().maxMemory()/1024);
print("總的內存為:"+Runtime.getRuntime().totalMemory()/1024);
print("==================================");
long currMemory=Runtime.getRuntime().freeMemory();
print("目前可用的內存為:"+currMemory/1024);
print("==================================");
Map cache=new HashMap();
for (int i = 0; i < 500000; i++) {
MockBean bean=new MockBean();
bean.setId(i);
bean.setName("jerry"+i);
bean.setValue(i+"jerry");
cache.put(String.valueOf(i), bean);
long tempMemory=Runtime.getRuntime().freeMemory();
if((currMemory-tempMemory)/1024==1024){
print("此時可用的內存為:"+tempMemory/1024);
print("此時緩存了:"+i+"個對象");
break;
}
}
print("==================================");
cache.clear();
long tempMemory=Runtime.getRuntime().freeMemory();
print("目前可用的內存為:"+tempMemory/1024);
print("消耗的內存為:"+(currMemory-tempMemory)/1024);
print("==================================");
Runtime.getRuntime().gc();
tempMemory=Runtime.getRuntime().freeMemory();
print("目前可用的內存為:"+tempMemory/1024);
print("消耗的內存為:"+(currMemory-tempMemory)/1024);
}
private void print(String msg){
System.out.println(msg);
}
在我機器上運行的結果是1M內存可緩存大概4479個對象,同時可以看到,在cache.clear後內存並沒有變化,因為gc是沒那麼及時的,這個時候顯式的調用gc則會發現可用的內存量甚至比最初都多。
當然,這里只是個簡單的測試,這里測試的也只是緩存一個非常簡單的bean對象,緩存的對象消耗的內存大小還需要根據這個對象中具體的內容而定,比如當緩存的是blob類型的欄位的時候,可想而知,這個時候消耗的內存量絕對是不同的。
這里只是建議大家在對系統性能做優化時最好根據需要緩存的內容做一個估算,設置好應用所需要的jvm的內存值,以便充分利用伺服器的硬體資源
㈥ 什麼是Java緩存技術Cache
java緩存技術
一、什麼是緩存
1、Cache是高速緩沖存儲器 一種特殊的存儲器子系統,其中復制了頻繁使用的數據以利於快速訪問
2、凡是位於速度相差較大的兩種硬體/軟體之間的,用於協調兩者數據傳輸速度差異的結構,均可稱之為 Cache
二、緩存的分類
1、基於web應用的系統架構圖
2、在系統架構的不同層級之間,為了加快訪問速度,都可以存在緩存
操作系統磁碟緩存->減少磁碟機械操作
資料庫緩存->減少文件系統I/O
應用程序緩存->減少對資料庫的查詢
Web伺服器緩存->減少應用伺服器請求
客戶端瀏覽器緩存->減少對網站的訪問。
㈦ Java的緩存框架有什麼用
(1100)(0)一、什麼是緩存1、Cache是高速緩沖存儲器一種特殊的存儲器子系統,其中復制了頻繁使用的數據以利於快速訪問2、凡是位於速度相差較大的兩種硬體/軟體之間的,用於協調兩者數據傳輸速度差異的結構,均可稱之為Cache二、緩存的分類1、基於web應用的系統架構圖2、在系統架構的不同層級之間,為了加快訪問速度,都可以存在緩存操作系統磁碟緩存->減少磁碟機械操作資料庫緩存->減少文件系統I/O應用程序緩存->減少對資料庫的查詢Web伺服器緩存->減少應用伺服器請求客戶端瀏覽器緩存->減少對網站的訪問三、操作系統緩存1、文件系統提供的DiskCache:操作系統會把經常訪問到的文件內容放入到內存當中,由文件系統來管理2、當應用程序通過文件系統訪問磁碟文件的時候,操作系統從DiskCache當中讀取文件內容,加速了文件讀取速度3、DiskCache由操作系統來自動管理,一般不用人工干預,但應當保證物理內存充足,以便於操作系統可以使用盡量多的內存充當DiskCache,加速文件讀取速度4、特殊的應用程序對文件系統DiskCache有很高的要求,會繞開文件系統DiskCache,直接訪問磁碟分區,自己實現Disk5、Cache策略Oracle的rawdevice(裸設備)–直接拋棄文件系統MySQL的InnoDB:innodb_flush_method=O_DIRECT四、資料庫緩存1、重要性資料庫通常是企業應用系統最核心的部分資料庫保存的數據量通常非常龐大資料庫查詢操作通常很頻繁,有時還很復雜以上原因造成資料庫查詢會引起非常頻繁的磁碟I/O讀取操作,迫使CPU掛起等待,資料庫性能極度低下2、緩存策略a、QueryCache以SQL作為key值緩存查詢結果集一旦查詢涉及的表記錄被修改,緩存就會被自動刪除設置合適的QueryCache會極大提高資料庫性能QueryCache並非越大越好,過大的QqueryCache會浪費內存。MySQL:query_cache_size=128Mb、DataBufferdatabuffer是資料庫數據在內存中的容器databuffer的命中率直接決定了資料庫的性能databuffer越大越好,多多益善MySQL的InnoDBbuffer:innodb_buffer_pool_size=2GMySQL建議bufferpool開大到伺服器物理內存60-80%五、應用程序緩存1、對象緩存由O/RMapping框架例如Hibernate提供,透明性訪問,細顆粒度緩存資料庫查詢結果,無需業務代碼顯式編程,是最省事的緩存策略當軟體結構按照O/RMapping框架的要求進行針對性設計,使用對象緩存將會極大降低Web系統對於資料庫的訪問請求良好的設計資料庫結構和利用對象緩存,能夠提供極高的性能,對象緩存適合OLTP(聯機事務處理)應用2、查詢緩存對資料庫查詢結果集進行緩存,類似資料庫的QueryCache適用於一些耗時,但是時效性要求比較低的場景。查詢緩存和對象緩存適用的場景不一樣,是互為補充的當查詢結果集涉及的表記錄被修改以後,需要注意清理緩存3、頁面緩存a、作用針對頁面的緩存技術不但可以減輕資料庫伺服器壓力,還可以減輕應用伺服器壓力好的頁面緩存可以極大提高頁面渲染速度頁面緩存的難點在於如何清理過期的緩存b、分類I、動態頁面靜態化利用模板技術將訪問過一次的動態頁面生成靜態html,同時修改頁面鏈接,下一次請求直接訪問靜態鏈接頁面動態頁面靜態化技術的廣泛應用於互聯網CMS/新聞類Web應用,但也有BBS應用使用該技術,例如Discuz!無法進行許可權驗證,無法顯示個性化信息可以使用AJAX請求彌補動態頁面靜態化的某些缺點II、Servlet緩存針對URL訪問返回的頁面結果進行緩存,適用於粗粒度的頁面緩存,例如新聞發布可以進行許可權的檢查OScache提供了簡單的Servlet緩存(通過web.xml中的配置)也可以自己編程實現Servlet緩存III、頁面內部緩存針對動態頁面的局部片斷內容進行緩存,適用於一些個性化但不經常更新的頁面(例如博客)OSCache提供了簡單的頁面緩存可以自行擴展JSPTag實現頁面局部緩存六、web伺服器端緩存基於代理伺服器模式的Web伺服器端緩存,如squid/nginxWeb伺服器緩存技術被用來實現CDN(內容分發網路contentdeliverynetwork)被國內主流門戶網站大量採用不需要編程,但僅限於新聞發布類網站,頁面實時性要求不高七、基於ajax的瀏覽器緩存使用AJAX調用的時候,將資料庫在瀏覽器端緩存只要不離開當前頁面,不刷新當前頁面,就可以直接讀取緩存數據只適用於使用AJAX技術的頁面
㈧ java怎麼將數據放入緩存
java放入session緩存中
方法如下:
session.setAttribute("Name",Value);
Name 隨便取,value就是要放的數據
獲取的時候session.getAttribute("Name);
就可以了
㈨ java作緩存時,緩存進內存還是用redis好
如果數據比較小,並且不會大量並發存儲 可以選擇存在內存, 否則 當然選用存儲服務來進行存儲。 沒有什麼是一定好的,根據實際情況選擇技術。
㈩ java 線程什麼時候會從主內存刷新本地緩存
你的4個變數一旦聲明會自動在內存中創建。
jvm也沒有你說的緩存,高速緩存這些東西,全部放在堆內存中。
堆內存中的東西在GC的時候會移動