Ява управления памятью с несколькими потоками

Я использую сервлет tomcat, который одновременно сохраняет контент, когда он становится доступным сервлету. Один запрос может содержать 1 или несколько тысяч частей (компонентов), которые могут потребоваться для хранения.

Чтобы справиться с параллелизмом, я использую таблицу указателей потоков фиксированного размера. Когда компонент становится доступным для хранения - объект хранения назначается слоту в таблице, и начинается выполнение. Когда поток завершает работу, слот обнуляется, а другой объект хранения назначается по мере необходимости. Если используются все слоты в таблице, то таблица периодически проверяется на завершенные потоки, и поток заменяется.

Управление памятью с помощью этой модели может быть затруднено, поскольку сборка мусора никогда полностью не очищает память, используемую протекторами после их смерти. Это может привести к переполнению памяти или слишком маленькому восстановлению памяти.

Есть ли способ обработки GC с этим типом - например, требуется синхронизация с последующим GC? Есть ли обработчик параллелизма Java, который соответствует этому типу обработки...

Мы ценим любые предложения.

Спасибо

1 ответ

То, что я первоначально думал, было проблемой в GC, не полностью очищающей память, было то, что я видел только небольшую коллекцию GC, которая только частично очистила. Когда произойдет крупная коллекция, наш сервис будет заморожен на 10 минут.

После некоторых экспериментов с различными сборщиками, похоже, что новый сборщик G1 в версии 7, делает свое дело.

Спасибо всем, кто это исследовал.

Другие вопросы по тегам