posts - 241,  comments - 116,  trackbacks - 0

          在做網(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)。集裝箱運(yùn)費(fèi)
          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)存泄漏WiiU中文站

          目前此問(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-16 09:55 墻頭草 閱讀(760) 評(píng)論(0)  編輯  收藏

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


          網(wǎng)站導(dǎo)航:
           
          人人游戲網(wǎng) 軟件開(kāi)發(fā)網(wǎng) 貨運(yùn)專(zhuān)家
          主站蜘蛛池模板: 昭通市| 新田县| 遵义县| 拜城县| 鄯善县| 师宗县| 蕉岭县| 涞源县| 平原县| 来宾市| 米易县| 科技| 桃园县| 云南省| 七台河市| 呼玛县| 曲麻莱县| 武威市| 西林县| 乌拉特后旗| 平武县| 卫辉市| 布尔津县| 巫山县| 四子王旗| 长宁县| 双鸭山市| 格尔木市| 青岛市| 从化市| 包头市| 象山县| 衡东县| 乌恰县| 黄浦区| 洞头县| 阳曲县| 博湖县| 黄陵县| 中方县| 桐城市|