Объекты не завершаются, а поток финализатора ничего не делает

На нашем сервере у нас начались проблемы сOutOfMemoryError, Мы проанализировали дампы кучи с помощью Eclipse Memory Analysis и обнаружили, что многие объекты были удержаны для завершения (около 2/3 кучи):

Мы обнаружили, что это может быть некоторая блокировка метода finalize (). Я нашел несколько сообщений об ошибках этой проблемы (Вот или жеВот), и это всегда проявлялось в стеке потоков Финализатора, что оно где-то было заблокировано. Но в нашем случае эта тема была в ОЖИДАНИИ:

"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)

РЕДАКТИРОВАТЬ:

Затем мы попытались добавить-XX:+UseConcMarkSweepGC, но безуспешно, только частотаOutOfMemoryErrors уменьшились, поэтому мы сначала подумали, что это помогло.

Наконец, мы заподозрили ошибку JVM и обновили ее с OpenJDK 1.6.0_30 до Oracle JDK 1.7.0_51, и проблема исчезла (по крайней мере, так кажется, за последние 4 часа использованная куча не увеличилась). Мы не помним никаких изменений в методе finalize и не обновляли какую-либо библиотеку, за это время произошли лишь незначительные изменения. Проблема не воспроизводится на нашем тестовом сервере с той же конфигурацией, за исключением того, что это 64-битная JVM, а рабочий сервер 32-битный.

Вопрос в том, что может быть причиной того, что Объекты не были завершены иFinalizer&nbsp;поток ожидает следующего объекта? Правильно ли мы проанализировали дамп кучи?

Спасибо за все ответы.