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

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

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

    cyj86

    Java加載dll,導(dǎo)致Java進(jìn)程內(nèi)存泄露

    By zhaoch

    在做網(wǎng)絡(luò)監(jiān)控系統(tǒng)性能測(cè)試時(shí),出現(xiàn)了內(nèi)存泄露的問(wèn)題,困擾了很久,現(xiàn)在終于算是解決了,但是根本原因尚不明確,拿出來(lái)大家討論下,看看能不能完美解決~

    這個(gè)問(wèn)題奇怪的地方在于是Java進(jìn)程內(nèi)存泄露,而不是平常的JVM內(nèi)存泄露,用Jprofile等工具也無(wú)法看出問(wèn)題所在。

    測(cè)試代碼如下:

     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         }

    說(shuō)明:此段代碼所做的工作就是加載一個(gè)dll,然后不斷的啟動(dòng)線程(線程什么也不做,直接終止)。
    注:線程池只是為了加速問(wèn)題復(fù)現(xiàn),無(wú)其他用處。

    現(xiàn)象:
    1.如果不加載dll,只不斷的啟動(dòng)線程,Java進(jìn)程內(nèi)存正常,不會(huì)一直增長(zhǎng)。
    2.如果加載附件中test1的dll,Java進(jìn)程內(nèi)存會(huì)一直增長(zhǎng)。
    3.如果加載附件中test2的dll(需要安裝C++運(yùn)行環(huán)境vcredist_x86),Java進(jìn)程內(nèi)存正常,不會(huì)一直增長(zhǎng)。

    dll說(shuō)明:
    dll的工程源碼在附件中,test1和test2的區(qū)別只在于編譯選項(xiàng),如附件:test1選擇的是“使用標(biāo)準(zhǔn)Windows庫(kù)”或“在靜態(tài)庫(kù)中使用MFC”,test2選擇的是“在共享DLL中使用MFC”
    此dll工程的特點(diǎn)在于使用了jni,并引入了mfc頭文件【#include <afxwin.h>】,如果不引入mfc頭文件則不會(huì)引起內(nèi)存泄漏


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

    /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 薛定諤的貓 閱讀(1793) 評(píng)論(4)  編輯  收藏 所屬分類: 典型、疑難問(wèn)題

    Feedback

    # re: Java加載dll,導(dǎo)致Java進(jìn)程內(nèi)存泄露 2011-06-13 18:40 楓子

    此段代碼所做的工作就是加載一個(gè)dllhttp://www.imfeng.com/  回復(fù)  更多評(píng)論   

    # re: Java加載dll,導(dǎo)致Java進(jìn)程內(nèi)存泄露 2011-06-15 13:29 懶人助手

    加載一個(gè)dll文章,也看看http://www.lrtool.net  回復(fù)  更多評(píng)論   

    # re: Java加載dll,導(dǎo)致Java進(jìn)程內(nèi)存泄露 2011-06-16 14:49 writegull

    學(xué)習(xí)了。不錯(cuò)  回復(fù)  更多評(píng)論   

    # re: Java加載dll,導(dǎo)致Java進(jìn)程內(nèi)存泄露 2011-06-30 22:41 FlyingFly

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

    可能這個(gè)問(wèn)題并不是java 通過(guò)jni loadlibrary的問(wèn)題, 你可以試試通過(guò)C#Code load 這個(gè)dll 然后 開(kāi)多個(gè)thread 是不是也有類似的問(wèn)題。

    Memory leaks creating threads after loading LoadLibrary

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


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲精品无码久久久久久| 香蕉免费在线视频| 亚洲人成电影网站国产精品 | 成年女人看片免费视频播放器| 国产成人综合久久精品亚洲| 狠狠亚洲狠狠欧洲2019| 亚洲精品免费在线| 黄页视频在线观看免费| 亚洲性天天干天天摸| 国产一级理论免费版| 日韩内射激情视频在线播放免费 | 亚洲国产V高清在线观看| 日本免费一区二区久久人人澡| xxx毛茸茸的亚洲| 国产成A人亚洲精V品无码| 色吊丝最新永久免费观看网站 | 国产精品深夜福利免费观看| a级毛片在线免费观看| 亚洲综合欧美色五月俺也去| 人人狠狠综合久久亚洲88| 日韩精品无码人妻免费视频| 性色午夜视频免费男人的天堂| 国产成人不卡亚洲精品91| 久久久亚洲欧洲日产国码是AV| 亚洲精品久久久www| 成人黄动漫画免费网站视频| 国产成人久久AV免费| 午夜成人无码福利免费视频| 亚洲kkk4444在线观看| 亚洲欧洲日产国产综合网| 亚洲女人被黑人巨大进入| 成人免费无码大片a毛片软件| 久久久久免费精品国产小说| 一区二区三区AV高清免费波多| 亚洲已满18点击进入在线观看| 午夜亚洲www湿好大| 亚洲综合无码AV一区二区| 国产精品国产午夜免费福利看| 噼里啪啦免费观看高清动漫4| 日韩精品极品视频在线观看免费 | 日本免费精品一区二区三区|