- Java Virtual Machine Tutorial
- JVM - Home
- JVM - Introduction
- JVM - Architecture
- JVM - Class Loader
- JVM - Runtime Data Areas
- JVM - The JIT Compiler
- JVM - Compilation Levels
- JVM - 32b vs. 64b
- JVM - JIT Optimisations
- JVM - Garbage Collection
- JVM - Generational GCs
- JVM - Tuning the GC
- JVM - Memory Leak in Java
- Java Virtual Machine Resources
- JVM - Quick Guide
- JVM - Useful Resources
- JVM - Discussion
Java 虚拟机 - Java 中的内存泄漏
本章我们将讨论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 并将连接对象视为不可访问之前,物理连接保持打开状态。现在,它将调用连接对象上的最终方法,但是,它可能不会被实现。因此,该对象在此周期中不会被垃圾回收。
接下来会发生同样的事情,直到远程服务器发现连接已经打开很长时间并强制终止它。因此,没有引用的对象会长时间保留在内存中,从而造成泄漏。