Javaでのメモリ漏洩

1243 ワード


       現在Javaを学ぶ人が多く、Javaを主な開発言語として使う会社も多く、Javaはプラットフォームに関係のない優位性のほか、強力なゴミ回収メカニズムがあり、つまりプログラマーがメモリの回収を管理しなくてもよいということです.これはJavaが多くの人に好まれる理由で、C/C++の中で、プログラマーは1つのオブジェクトの破壊を管理して、メモリの漏洩を防ぐ必要があります(メモリの漏洩はもう使わないメモリが回収されていません)、そのためC/C++プログラムの中で、よくメモリの漏洩の誤りを発見します!
       では、Javaでは本当にメモリが漏れることはありませんか?理想は完璧で、現実は骨感があります!Javaでは依然としてメモリの漏洩が存在し、これはJava言語自体の問題ではなく、プログラマーの基本的な素質の問題です.
       Javaにおけるごみ回収メカニズムは,1つのオブジェクトが回収すべきかどうかをどのように判断するのか.このオブジェクトが強参照されていない場合(参照も複数あり、ソフト参照であればメモリが足りない場合は回収)、このオブジェクトは回収できます!
       この場合、オブジェクトは参照されますが、プログラムにはアクセスされません.の私たちの考えによると、このオブジェクトは役に立たないに相当し、それは回収されるべきだが、Javaの回収メカニズムはこのオブジェクトが依然として引用され、回収できないと判定している.メモリの漏洩が発生しました!
   
public Object pop()
{      
      if(size==0)      
       {          
            thow new RuntimeException("");      }      
          return elementData[--size];
}

   上は配列に基づいてStackクラスのpopメソッドを実現しています.明らかに、このメソッドの最後の文は、配列の要素を返すだけで、elementData配列の最後の要素の参照をクリアしていないので、メモリ漏洩が発生します.コードは次のように改善されました.
   
public object pop()
{
      .....
     Object ele=elementData[--size];
     //             
     elementData[size]=null;
     return ele;
}