<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

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

    posted on 2006-01-12 23:57 BlueDavy 閱讀(2859) 評論(5)  編輯  收藏 所屬分類: Java

    評論

    # re: 1M內存可用來緩存多少對象? 2006-01-13 10:06 Samuel Cai

    多謝,以前也有想驗證這些問題,卻沒動手。  回復  更多評論   

    # re: 1M內存可用來緩存多少對象? 2006-01-13 12:05 javastr

    請問一個web系統中的所有的數據操作,都是占用的jvm內存,而不是電腦硬件內存嗎??  回復  更多評論   

    # re: 1M內存可用來緩存多少對象? 2006-01-13 20:47 Programmer's Life

    所有的java程序都運行在jvm中,jvm啟動時會有對于硬件內存的一個占有值,比如占有256M、512M等  回復  更多評論   

    # re: 1M內存可用來緩存多少對象? 2006-01-16 00:56 yundy

    你這樣測試沒有意義,每個對象占用的內存都是不一樣的  回復  更多評論   

    # re: 1M內存可用來緩存多少對象? 2006-01-16 18:24 Programmer's Life

    ^_^,本來就只是列舉一個方法而已...  回復  更多評論   

    公告

     









    feedsky
    抓蝦
    google reader
    鮮果

    導航

    <2006年1月>
    25262728293031
    1234567
    891011121314
    15161718192021
    22232425262728
    2930311234

    統計

    隨筆分類

    隨筆檔案

    文章檔案

    Blogger's

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 久久亚洲精品11p| 亚洲av无码不卡久久| 亚洲国产精品毛片av不卡在线| 免费鲁丝片一级观看| 免费国产在线观看| 亚洲av永久无码精品国产精品| 亚洲精品不卡视频| 亚洲av无码专区首页| 免费的一级片网站| 羞羞网站免费观看| 免费A级毛片无码专区| 免费特级黄毛片在线成人观看 | 国产精品亚洲二区在线观看| 亚洲欧洲在线观看| 亚洲一区二区三区成人网站 | 亚洲精品乱码久久久久久中文字幕| 亚洲国产精品久久66| 日韩精品无码免费一区二区三区 | 日韩视频免费一区二区三区| 亚洲av综合av一区| 台湾一级毛片永久免费| 国产午夜亚洲精品理论片不卡 | 亚洲精品老司机在线观看| 亚洲国产精品成人精品软件 | 一级毛片在线免费播放| 国产精彩免费视频| 亚洲成A人片在线观看无码不卡| 亚洲av无码专区青青草原| 国产国拍亚洲精品福利| 最近中文字幕大全免费版在线 | 久久亚洲一区二区| 中国毛片免费观看| 在线免费观看国产视频| 一个人看的hd免费视频| 亚洲午夜在线电影| 日韩免费视频播播| 国产色无码精品视频免费| 亚洲国产激情在线一区| 国产成人精品免费视频网页大全| 亚洲av无码乱码国产精品| 中文字幕影片免费在线观看|