日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java 1m_Java编程测试1M内存可用来缓存多少对象

發布時間:2024/9/27 java 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 1m_Java编程测试1M内存可用来缓存多少对象 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

為了提高系統的響應性能,一般都會采用緩存技術來實現,如果用象ehcache、oscache這樣的開源的cache工具來實現,一般都需要由開發人員來設置maxElementsInMemory這個值,但這個值在設置的時候大家都是怎么去設置的呢?憑想像還是隨便寫一個值呢?這個值設的過大嘛有可能會造成outofmemory,設的過小嘛又浪費服務器巨大的內存,為了能夠更好的設置這個值,我寫了個測試程序來估算1M內存能夠緩存多少個對象,代碼如下:

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 1m_Java编程测试1M内存可用来缓存多少对象的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。