Java虛擬機(JVM)記憶體洩漏

在本章中將討論Java中的記憶體洩漏概念。

以下代碼在Java中創建記憶體洩漏 -

void queryDB() {
   try{
      Connection conn = ConnectionFactory.getConnection();
      PreparedStatement ps = conn.preparedStatement("query"); // executes a  SQL
      ResultSet rs = ps.executeQuery();
      while(rs.hasNext()) {
         //process the record
      }
   } catch(SQLException sqlEx) {
      //print stack trace
   }
}

在上面的代碼中,當方法退出時,沒有關閉連接對象。因此,在GC被觸發之前物理連接保持打開並且看到連接對象不可達。現在,它將在連接對象上調用final方法,但是,它可能無法實現。因此,在該迴圈中不會對對象進行垃圾收集。

同樣的事情將在下一次發生,直到遠程伺服器發現連接已經打開了很長時間並強制終止它。因此,沒有引用的對象長時間保留在記憶體中,這會產生洩漏。


上一篇: Java虛擬機(JVM)調整GC 下一篇:無