tôi quan sát thấy trong NetBeans Profiler rằng Surviving Generations vẫn tiếp tục tăng sau khi tôi thực hiện truy vấn:rò rỉ bộ nhớ MyBatis trong một truy vấn mà kết quả là một danh sách các avg. 30k hàng
@Select("SELECT * FROM ais_dynamic WHERE rep_time >= #{from} AND rep_time <= #{to} AND ais_system = #{sys}")
@Options(useCache=false,fetchSize=8192)
List<AisDynamic> getRecords(
@Param("from") Timestamp from,
@Param("to") Timestamp to,
@Param("sys") int sys);
Nó là như nếu đối tượng nằm trong danh sách không bao giờ được phát hành mặc dù họ không được sử dụng bất cứ nơi nào khác và phải chết với chuỗi nền chạy truy vấn và xử lý kết quả của nó.
Dưới đây là kết quả trực tiếp trả về bởi NetBeans Profiler:
Câu hỏi của tôi:
- Làm thế nào tôi có thể ngăn chặn sự rò rỉ bộ nhớ?
- Làm cách nào để tối ưu hóa truy vấn này, vì có thể thấy tôi bắt đầu chơi với
Options
mặc dù điều này không ngăn chặn rò rỉ bộ nhớ?
Nếu cần gì, vui lòng cho tôi biết tôi sẽ cung cấp những gì.
UPDATE:
Sau khi kiểm tra tôi càng quan tâm nhiều hơn là vấn đề đặt với MyBatis giữ một tham chiếu đến các kết quả lấy ra như vậy, họ không phải là thu gom rác thải theo thời gian. Sau khi thực hiện 20 cuộc gọi của truy vấn thì chờ đợi tôi quan sát không có bộ sưu tập rác ngay cả sau 30 phút. Tất cả những gì tôi làm là gọi phương thức: List<AisDynamic> adList = mapper.getRecords(from, to, sys);
Tôi cũng bị rò rỉ bộ nhớ với MyBatis. Bạn có tìm thấy giải pháp nào cho vấn đề của mình không? – Marc
@Marc Tôi quan sát thấy rằng nó chỉ xảy ra cho các tình huống khi tôi lấy một số lượng lớn các hàng lớn hơn 10k. Các giải pháp mà làm việc cho tôi là sử dụng một JDBC và mã tất cả bằng tay tất cả cùng nhau và vấn đề đã biến mất. Đã kiểm tra ngay cả đối với 50 nghìn hàng. Mặc dù nó đã giải quyết được vấn đề cho tôi nhưng tôi thực sự thích dùng MyBatis hơn vì nó tiết kiệm rất nhiều mã hóa nhưng trong trường hợp này, điều đó là không thể. Mặc dù tôi đang chờ đợi một giải pháp tốt hơn, ai biết được có thể sửa chữa API là cần thiết? – Boro
Bạn có thể thêm cấu hình này vào tệp cấu hình MyBatis của bạn và xem có sự khác biệt nào không: ' ' –
partlov