国产探花免费观看_亚洲丰满少妇自慰呻吟_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的內存值,以便充分利用服務器的硬件資源。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 盐边县| 郓城县| 且末县| 亚东县| 景洪市| 胶州市| 蓝田县| 木里| 罗田县| 石柱| 乌拉特前旗| 陈巴尔虎旗| 留坝县| 通道| 湄潭县| 阿瓦提县| 天全县| 吉水县| 金昌市| 红河县| 海伦市| 博湖县| 连州市| 沁源县| 云浮市| 南宫市| 禹城市| 深圳市| 林州市| 洛宁县| 威远县| 遵义县| 潮安县| 渑池县| 黄骅市| 安阳市| 隆安县| 呼图壁县| 襄樊市| 遵义市| 清水河县|