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

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

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

    大夢想家

    5年開發工程師,2年實施經理,X年售前顧問,......
    數據加載中……
    再次尋求從事過Java桌面的應用的朋友解惑~
           今天早上的Blog大家都看到了,大家的留言我也一一拜讀過了~感謝 zhrb ,千里冰封 javazhai ,BeanSoft ,plankton13 ,mingj 等的回復。
            下午反省了一下自己的代碼,得出一下結論和疑問,有時間,請大家再討論一下。
            1.反省代碼,整理所有用過的對象,特別上查詢完數據庫返回的上萬條記錄的結果集,一一將他們制空,然后再System.gc()看看效果;
            2.因為是通用數據查詢平臺,那么結果集的展示形式是可以由實施人員自由定義的,比方說字體,顏色,圖片等等,雖然我沒有使用JFace對資源封裝的統一標準組件,但是絕對是在使用完一一做了銷毀處理,我的疑問是,我對資源做了銷毀處理,是不是這部分資源在虛擬機中的占用空間依舊存在,也就是并沒有真正的銷毀他們;
                    這里談談自己的實踐經驗,如果真的是資源的問題,首先出問題的還輪不到Javaw,Eclipse馬上就會出來叫囂,告訴你沒有足夠的資源的可以使用,不能創建GC,字體,顏色或者是圖片等等,如果還是不解決,客戶端的GUI馬上就會變形,變的面目全非~
            3.我現在碰到的問題還不是內存不足,或者內存溢出,而是Javaw的內存占有再不斷的遞增,并不是某一個恒定值區間;


            希望大家再次賜教!

    客戶虐我千百遍,我待客戶如初戀!

    posted on 2007-10-21 20:34 阿南 閱讀(1375) 評論(12)  編輯  收藏 所屬分類: Eclipse-RCP

    評論

    # re: 再次尋求從事過Java桌面的應用的朋友解惑~  2007-10-21 21:47 mingj

      回復  更多評論    

    # re: 再次尋求從事過Java桌面的應用的朋友解惑~  2007-10-22 01:34 千里冰封

    還有一點,盡量用局部變量,少用成員變量,更不要把大量變量做為參數傳來傳去。
      回復  更多評論    

    # re: 再次尋求從事過Java桌面的應用的朋友解惑~ [未登錄] 2007-10-22 09:50 wzjin

    如果你使用非java代碼,如jni,在操作系統管理器看到的和JProfiler看到的不一樣,前者可能內存占用一致增加,后這顯示內存占用呈鋸齒型,也就是有垃圾回收作用。你可以試試。沒有用過swt,但是用過jni。
      回復  更多評論    

    # re: 再次尋求從事過Java桌面的應用的朋友解惑~  2007-10-22 10:14 阿南

    其實SWT底層就是JNI實現的,那么請問您是如何處理JNI占有大量內存的問題的?
      回復  更多評論    

    # re: 再次尋求從事過Java桌面的應用的朋友解惑~  2007-10-22 10:27 豬兒笨笨

    我做RCP比較多,給你以下幾個建議
    1、打開Windows的任務管理器,先看一下你的UI句柄的數量,如果過多,表示有資源沒有釋放
    2、用TPTP之類的工具檢查有無大的內存占用
    3、如果是Tree的內容太多(可能性不太大),用SWT.VIRTUAL試試。

    我感覺應該是代碼的問題,而非SWT的問題,因為我的項目中有30萬行,近百個插件,加上WTP平臺都沒有這個問題。
      回復  更多評論    

    # re: 再次尋求從事過Java桌面的應用的朋友解惑~  2007-10-22 10:39 豬兒笨笨

    如果你使用了圖片,麻煩先在LabelProvider中的getImage返回null,看一下是不是因為圖片資源的問題
      回復  更多評論    

    # re: 再次尋求從事過Java桌面的應用的朋友解惑~  2007-10-22 10:41 阿南

    是不是字體,顏色,圖片對資源都有較大影響?
      回復  更多評論    

    # re: 再次尋求從事過Java桌面的應用的朋友解惑~  2007-10-22 10:43 Matthew Chen

    swt就是jni實現的,所以它dispose的時候一定就釋放了系統的資源(除非swt可能有的bug),留下純java的對象卻是gc管理的,所以你確定dispose了的話問題就還在jvm內部,大的數據量一般會有緩沖機制,說到這里,不知你的程序是否依托于容器了,提供了對象緩沖池的實現,需要時獲得對象,釋放時直接歸到池中,不作銷毀,而是供下一次類似的請求直接修改并做二次使用,通過動態調整對象數量來適應不同需求。(但也可能內存占用增加就時由這部分的不合理使用產生的,看看容器有沒有全局變量的使用,例如session之類的)

    你上一篇中提到任務管理器顯示占用增加,我覺得并不是程序在占用,而是虛擬機根據你程序使用內存的趨勢不斷要求系統提供更大的內存以保證程序的運行。

    還有swt占用的系統資源不會由jvm管理,所以你對swt資源的釋放對jvm內存占用沒有影響。
      回復  更多評論    

    # re: 再次尋求從事過Java桌面的應用的朋友解惑~  2007-10-22 10:47 阿南

    恩,你的觀點,我同意,JVM應該就是在幫我增加內存,以防止我再次使用更大的數據時,出現內存溢出~
      回復  更多評論    

    # re: 再次尋求從事過Java桌面的應用的朋友解惑~  2007-10-22 10:57 阿南

    看來,我得想辦法減少大數據量的出現了~我的數據,每次都是上萬的,而且是一次讀取的,這個就是很可怕的~
      回復  更多評論    

    # re: 再次尋求從事過Java桌面的應用的朋友解惑~  2007-10-22 13:09 豬兒笨笨

    如果你的記錄都是小的記錄
    一條不超過1K,應該也不是這個問題
    一萬條也才10M
    我想應該還是有數據沒有正確釋放
    比如上一次取得的數據還被某個static變量持有
      回復  更多評論    

    # re: 再次尋求從事過Java桌面的應用的朋友解惑~  2008-07-06 23:30 三告習習

    System.gc() 并不能按照你的意愿馬上回收無效對象,因為激發垃圾回收操作是有條件的,這個條件不是你來決定的,而是虛擬機以它自己的算法來計算的,函數的調用起的作用好像不大。

    如果是swt的話,對象要銷毀與否,分為兩種吧。一種是從系統里調出來的,比如System.get...,這樣的對象是不需要你來銷毀的,如果是你new出來的,那么你就要負責銷毀它,這在于swt上特別重要,java的垃圾回收也不會幫你自動回收好像哦,因為它涉及到jni的內容,不是虛擬機能管的吧。

    在swt對象中,最好每個對象都配一個dispost方法,在父容器里管理子對象,父容器被dispost時自動調用子對象的dispost方法。

    我在使用使用swt時,管理資源還是比較麻煩的,還得好好研究。
      回復  更多評論    
    主站蜘蛛池模板: 毛片免费在线观看网站| 久久久久无码专区亚洲av| 亚洲国产高清国产拍精品| 亚洲精品NV久久久久久久久久| 一级一级一级毛片免费毛片| 亚洲最新永久在线观看| 免费看片A级毛片免费看| 青青操视频在线免费观看| 色噜噜亚洲男人的天堂| 久久亚洲色一区二区三区| 成年人网站免费视频| 成人午夜影视全部免费看| 亚洲成无码人在线观看| 亚洲色偷偷狠狠综合网| 国产在线a免费观看| 精品97国产免费人成视频| 男人天堂2018亚洲男人天堂| 国产成人精品日本亚洲专区61| 0588影视手机免费看片| 一级成人生活片免费看| 亚洲日本久久久午夜精品| 国产亚洲无线码一区二区| 国内自产少妇自拍区免费| 一级成人a毛片免费播放| 免费无码婬片aaa直播表情| 亚洲另类古典武侠| 亚洲午夜福利在线观看| 国产成人免费一区二区三区| 曰批视频免费40分钟试看天天| 2022免费国产精品福利在线| 亚洲人成无码网站在线观看| 精品亚洲成a人片在线观看少妇| 亚洲一级特黄无码片| 国产大片91精品免费观看男同 | 四虎影视永久在线精品免费| 亚洲日韩乱码久久久久久| 国产国拍亚洲精品mv在线观看 | 99爱免费观看视频在线| 国产免费AV片在线观看播放| 亚洲爆乳精品无码一区二区| 亚洲免费二区三区|