Los objetos no se finalizan y el subproceso finalizador no hace nada

En nuestro servidor, comenzamos a tener problemas conOutOfMemoryError. Analizamos los volcados del montón utilizando el Análisis de memoria de Eclipse y descubrimos que se mantenían muchos objetos para finalizar (aproximadamente 2/3 del montón):

Descubrimos que podría ser algún bloqueo del método finalize (). Encontré varios informes de errores de este problema (aquí oaquí), y siempre se manifestó en la pila de subprocesos Finalizer, que estaba bloqueado en algún lugar. Pero en nuestro caso, este hilo estaba ESPERANDO:

"Finalizer" daemon prio=10 tid=0x43e1e000 nid=0x3ff in Object.wait() [0x43dfe000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0x4fe053e8> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:133)
        - locked <0x4fe053e8> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:149)
        at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:189)

EDITAR:

Luego intentamos agregar-XX:+UseConcMarkSweepGC, pero sin éxito, solo la frecuencia deOutOfMemoryErrors disminuido, por lo que primero pensamos que ayudaba.

Finalmente, sospechamos del error de JVM y lo actualizamos de OpenJDK 1.6.0_30 a Oracle JDK 1.7.0_51, y el problema desapareció (al menos así parece, durante las últimas 4 horas el montón usado no crece). No recordamos ningún cambio en el método de finalización, ni actualizamos ninguna biblioteca, solo hubo desarrollos menores durante ese tiempo. El problema no se reproduce en nuestro servidor de prueba, con la misma configuración, excepto que es JVM de 64 bits mientras que el servidor de producción es de 32 bits.

La pregunta es: ¿cuál podría ser la causa de que los objetos no se finalicen yFinalizer&nbsp;hilo esperando el próximo objeto? ¿Analizamos el volcado del montón correctamente?

Gracias por todas las respuestas