Tôi là một lập trình viên C++ và tôi đang chơi xung quanh với java sau khi tìm JPA cho một vài ứng dụng hiện tại của tôi là một vị thần gửi. Tôi đã không tiếp xúc với java từ trường đại học và tôi đang gặp vấn đề khi hết dung lượng. Tôi đang sử dụng mã dưới đây như là một phần chính của một thử nghiệm không nghiêm trọng về jdbc/jpa/lucene nhưng tôi tiếp tục nhận ngoại lệ ngẫu nhiên OutOfMemory.quản lý bộ nhớ java
EntityManager em = emf.createEntityManager();
Query q = em.createQuery("select p from Product p" +
" where p.productid = :productid");
Connection con = DriverManager.getConnection("connection string");
Statement st = con.createStatement();
IndexWriter writer = new IndexWriter("c:\\temp\\lucene", new StandardAnalyzer(), IndexWriter.MaxFieldLength.LIMITED);
ResultSet rs = st.executeQuery("select productid from product order by productid");
while (rs.next()) {
int productid = rs.getInt("PRODUCTID");
q.setParameter("productid", productid);
Product p = (Product)q.getSingleResult();
writer.addDocument(createDocument(p));
}
writer.commit();
writer.optimize();
writer.close();
st.close();
con.close();
tôi sẽ không gửi tất cả các createDocument nhưng tất cả nó làm là khởi tạo một org.apache.lucene.document.Document mới và bổ sung thêm các lĩnh vực thông qua add (mới Dòng ...) vv Có khoảng 50 các trường trong tổng số và hầu hết là các chuỗi ngắn (< 32 ký tự).
Trong tính mới của tôi là có điều gì đó hoàn toàn ngu ngốc tôi đang làm (hay không) có thể khiến mọi thứ không bị GC?
Có các phương pháp hay nhất liên quan đến quản lý bộ nhớ java và đánh dấu vào GC không?
GC không có vấn đề với tham chiếu vòng tròn, các đối tượng sẽ vẫn bị xóa. Tôi không chắc chắn tôi hiểu những gì bạn có nghĩa là bằng cách rõ ràng null ra tham chiếu đến các đối tượng. Làm thế nào khác bạn sẽ loại bỏ chúng? – Robin
Cách khác để xóa chúng là cho phép chúng vượt quá phạm vi. Thiết lập rõ ràng các tham chiếu đến null là cho sự kết hợp của các đối tượng humongous và các vòng lặp dài, nơi tham chiếu đối tượng sẽ được lưu giữ trong bộ nhớ trong một thời gian dài. – gnud