Soy un programador de C++ y estoy jugando con Java después de encontrar JPA que para algunas de mis aplicaciones actuales es un envío de dios. No he tocado Java desde la universidad y tengo problemas para quedarme sin espacio. Estoy usando el siguiente código como la parte principal de una prueba no muy grave de jdbc/jpa/lucene, pero sigo obteniendo excepciones OutOfMemory aleatorias.administración de memoria 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();
no voy a publicar todos createDocument pero todo lo que hace es crear una instancia de un nuevo org.apache.lucene.document.Document y agrega campos a través de add (nuevo campo ...), etc Hay alrededor de 50 campos en total y la mayoría son cadenas cortas (< 32 caracteres) de longitud.
En mi "newby-ness" hay algo completamente estúpido que estoy haciendo (o no) que haría que las cosas no se GC'd?
¿Existen mejores prácticas con respecto a la administración de la memoria Java y hacer cosquillas al GC?
GC no tiene problemas con las referencias circulares, los objetos seguirán siendo eliminados. No estoy seguro de entender lo que quiere decir con referencias explícitamente nulas a los objetos. ¿De qué otra manera los eliminarías? – Robin
La otra forma de eliminarlos es dejarlos fuera del alcance. Establecer explícitamente referencias a null es para la combinación de objetos enormes y bucles largos, donde la referencia del objeto se mantendría en la memoria durante un tiempo prolongado. – gnud