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

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

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

    cyj86

    Java加載dll,導致Java進程內存泄露

    By zhaoch

    在做網絡監控系統性能測試時,出現了內存泄露的問題,困擾了很久,現在終于算是解決了,但是根本原因尚不明確,拿出來大家討論下,看看能不能完美解決~

    這個問題奇怪的地方在于是Java進程內存泄露,而不是平常的JVM內存泄露,用Jprofile等工具也無法看出問題所在。

    測試代碼如下:

     1 System.loadLibrary("test1");
     2 
     3         int threadPoolSize = 400;
     4         ExecutorService service = Executors.newFixedThreadPool(threadPoolSize);
     5 
     6         for (int i = 0; i < 400; i++) {
     7             service.submit(new Runnable() {
     8                 public void run() {
     9                     while (true) {
    10                         try {
    11                             Thread t = new Thread();
    12                             t.start();
    13                             Thread.sleep(100);
    14                         } catch (Exception e) {
    15                             e.printStackTrace();
    16                         }
    17                     }
    18                 }
    19             });
    20         }

    說明:此段代碼所做的工作就是加載一個dll,然后不斷的啟動線程(線程什么也不做,直接終止)。
    注:線程池只是為了加速問題復現,無其他用處。

    現象:
    1.如果不加載dll,只不斷的啟動線程,Java進程內存正常,不會一直增長。
    2.如果加載附件中test1的dll,Java進程內存會一直增長。
    3.如果加載附件中test2的dll(需要安裝C++運行環境vcredist_x86),Java進程內存正常,不會一直增長。

    dll說明:
    dll的工程源碼在附件中,test1和test2的區別只在于編譯選項,如附件:test1選擇的是“使用標準Windows庫”或“在靜態庫中使用MFC”,test2選擇的是“在共享DLL中使用MFC”
    此dll工程的特點在于使用了jni,并引入了mfc頭文件【#include <afxwin.h>】,如果不引入mfc頭文件則不會引起內存泄漏


    目前此問題的根本原因尚不明確,懷疑是jdk的bug(使用最新的jdk1.6.0.23也沒用),不知道大家有什么想法嗎?歡迎大家討論~

    /Files/cyj86/dll工程.rar
    /Files/cyj86/test1.rar
    /Files/cyj86/test2.rar
    /Files/cyj86/vcredist_x86.rar
    /Files/cyj86/opt.png

    posted on 2011-06-13 11:45 薛定諤的貓 閱讀(1787) 評論(4)  編輯  收藏 所屬分類: 典型、疑難問題

    Feedback

    # re: Java加載dll,導致Java進程內存泄露 2011-06-13 18:40 楓子

    此段代碼所做的工作就是加載一個dllhttp://www.imfeng.com/  回復  更多評論   

    # re: Java加載dll,導致Java進程內存泄露 2011-06-15 13:29 懶人助手

    加載一個dll文章,也看看http://www.lrtool.net  回復  更多評論   

    # re: Java加載dll,導致Java進程內存泄露 2011-06-16 14:49 writegull

    學習了。不錯  回復  更多評論   

    # re: Java加載dll,導致Java進程內存泄露 2011-06-30 22:41 FlyingFly

    在MSDN看到一篇討論,看上去就跟你的問題類似。

    可能這個問題并不是java 通過jni loadlibrary的問題, 你可以試試通過C#Code load 這個dll 然后 開多個thread 是不是也有類似的問題。

    Memory leaks creating threads after loading LoadLibrary

    http://social.msdn.microsoft.com/Forums/en-US/vclanguage/thread/3bb5f18d-5484-4240-9b55-18dd50d02859/  回復  更多評論   


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 国产成人精品日本亚洲语音| 国产无遮挡吃胸膜奶免费看视频| 亚洲另类激情综合偷自拍| 国产一区二区三区免费观在线| 亚洲日韩中文字幕日韩在线| 日本一区二区三区在线视频观看免费 | 在线日韩日本国产亚洲| 日日摸夜夜添夜夜免费视频| 免费在线黄色网址| 美女羞羞免费视频网站| 亚洲av麻豆aⅴ无码电影| 免费人成视频在线播放| 亚洲毛片网址在线观看中文字幕| 无遮挡国产高潮视频免费观看| 亚洲国产成人精品91久久久| 日本激情猛烈在线看免费观看| 亚洲毛片av日韩av无码| 99久久免费国产特黄| 亚洲高清专区日韩精品| 久久久久久AV无码免费网站| 91精品手机国产免费| 91大神亚洲影视在线| 亚洲视频免费在线看| 亚洲一区二区三区播放在线| 中文字幕无码不卡免费视频| 亚洲影院天堂中文av色| 拔擦拔擦8x华人免费久久| 黄网站在线播放视频免费观看 | 亚洲精品一区二区三区四区乱码| 100000免费啪啪18免进| 在线观看亚洲AV日韩AV| 成人爱做日本视频免费| 一级a性色生活片久久无少妇一级婬片免费放 | 亚洲人成人无码.www石榴| 四虎成人精品在永久免费| 日本永久免费a∨在线视频| 亚洲熟妇无码AV在线播放| 国产亚洲欧美在线观看| 亚洲国产精品狼友中文久久久| 成人网站免费大全日韩国产| 亚洲an天堂an在线观看|