国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Java編程測試1M內存可用來緩存多少對象

2019-11-18 15:42:25
字體:
來源:轉載
供稿:網友

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

public void testSpike(){
  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的內存值,以便充分利用服務器的硬件資源。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 革吉县| 新津县| 连平县| 张家界市| 宜兰市| 镇原县| 阳山县| 镇巴县| 饶阳县| 涞水县| 华蓥市| 新疆| 民乐县| 益阳市| 合作市| 丰城市| 景谷| 通州区| 信宜市| 东光县| 仙游县| 沅陵县| 黄大仙区| 墨竹工卡县| 昔阳县| 长泰县| 红安县| 安义县| 婺源县| 鄂托克前旗| 泾源县| 永胜县| 自贡市| 卫辉市| 丰台区| 永安市| 克什克腾旗| 铜梁县| 黎平县| 子洲县| 江孜县|