Je suis un programmeur C++ et je suis en train de jouer avec java après avoir trouvé JPA qui pour quelques unes de mes applications actuelles est un dieu envoyé. Je n'ai pas touché à Java depuis l'université et j'ai un problème d'espace en tas. J'utilise le code ci-dessous comme la partie principale d'un test pas très sérieux de jdbc/jpa/lucene mais je continue à obtenir des exceptions OutOfMemory aléatoires.gestion de la mémoire 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();
Je ne publierez pas tous createDocument mais tout ce qu'il fait est instancier une nouvelle org.apache.lucene.document.Document et ajoute des champs par ajout (nouveau champ ...), etc. Il y a environ 50 les champs au total et la plupart sont des chaînes courtes (< 32 caractères) de longueur.
Dans mon nouveau-né, y a-t-il quelque chose de complètement stupide que je fais (ou pas) qui ferait que les choses ne soient pas gâchées? Y a-t-il des bonnes pratiques en matière de gestion de la mémoire Java et de chatouillement du CPG?
GC n'a aucun problème avec les références circulaires, les objets seront toujours supprimés. Je ne suis pas sûr de comprendre ce que vous entendez par références explicitement nulles aux objets. Sinon, comment les retireriez-vous? – Robin
L'autre façon de les supprimer est de les laisser sortir de la portée. La définition explicite des références à null est pour la combinaison d'objets gigantesques et de longues boucles, où la référence d'objet serait gardée en mémoire pendant une longue période. – gnud