Duffymo gần như chắc chắn đúng. Trong quá khứ, khi chúng ta đã bị rò rỉ bộ nhớ, nó thực tế LUÔN LUÔN trình điều khiển MySQL JDBC. Chỉ cần quên đóng một ít ResultSet hoặc Connection hoặc Statement ở đâu đó. Tôi đã kết thúc việc kiểm tra toàn bộ cơ sở mã cho mỗi lần chúng tôi sử dụng những cơ sở đó để tìm ra vấn đề và đảm bảo chúng được đóng.
Đối với HashMap, tôi cũng đã thấy điều đó. Tôi chưa xem mã nguồn nhưng ấn tượng của tôi là trình điều khiển MySQL đã lưu trữ các hàng (ít nhất là giá trị hàng) trong HashMaps nội bộ.
Rò rỉ kết quả rất dễ dàng. Ý tưởng về những tài nguyên có thể đóng được tự xử lý việc này trong JDK 7 hoặc 8 thực sự hấp dẫn tôi vì lý do này.
Bạn có thể chèn một lớp shim ở đâu đó (ví dụ như đối với Kết nối) để ghi nhật ký từng tài nguyên đã mở / đóng để xem liệu bạn có thể phát hiện được vị trí rò rỉ mà không cần đọc trực tiếp tất cả nguồn của bạn hay không.