<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

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 日韩精品一区二区亚洲AV观看| 亚洲老妈激情一区二区三区| 亚洲一级免费视频| 精品无码AV无码免费专区| 亚洲一区二区成人| 91免费在线播放| 亚洲性色精品一区二区在线| 日韩中文字幕精品免费一区| 国产精品高清视亚洲一区二区| 成人一a毛片免费视频| 国产精品成人亚洲| 亚洲情侣偷拍精品| 国内精品免费视频精选在线观看| 亚洲AV无一区二区三区久久| 美女内射无套日韩免费播放| 亚洲一区二区三区久久| 免费看无码自慰一区二区| 免费中文字幕视频| 九月丁香婷婷亚洲综合色| 3344免费播放观看视频| 中文日韩亚洲欧美制服| 亚洲AV无码一区二区三区在线观看 | 久久精品人成免费| 亚洲人成网站看在线播放| 国产无遮挡吃胸膜奶免费看视频| 黄色三级三级免费看| 久久亚洲精品人成综合网| 蜜臀91精品国产免费观看| igao激情在线视频免费| 亚洲欧洲尹人香蕉综合| 最新69国产成人精品免费视频动漫| 农村寡妇一级毛片免费看视频| 国产A在亚洲线播放| 久久久久免费看黄A片APP| 男人扒开添女人下部免费视频| 日韩亚洲Av人人夜夜澡人人爽| 国产青草视频在线观看免费影院| 两个人看的www视频免费完整版| 亚洲国产美女福利直播秀一区二区| 亚洲成av人片一区二区三区| 久久免费的精品国产V∧|