Я тоже тестирую UCP и обнаруживаю, что у меня проблемы с производительностью в приложении на основе пула потоков. Сначала я пробовал OracleDataSource, но у меня возникли проблемы с его настройкой для пакетной обработки. Я продолжаю получать исключения NullPointerException в соединениях, что наводит меня на мысль, что у меня какая-то утечка соединений, но только с некоторыми приложениями, которыми мы управляем, которые не ориентированы на пакетные процессы, и OracleDataSource работает хорошо.
Основываясь на этом посте и нескольких других исследованиях, которые я нашел, я попробовал UCP. Я обнаружил, что при достаточной настройке я могу избавиться от закрытых соединений / исключений NullPointerException при ошибках стиля соединений, но сборщик мусора терпит поражение. Долгосрочный сборщик мусора быстро заполняется и, кажется, никогда не освобождается до тех пор, пока приложение не завершит работу. Иногда это может занять несколько дней, если нагрузка действительно большая. Я также заметил, что обработка данных занимает больше времени. Я сравниваю это с устаревшим классом OracleCacheImpl (который мы сейчас используем в производстве, потому что он все еще «просто работает»), где он использует треть памяти GC, которую UCP делает и обрабатывает файлы гораздо быстрее. Во всех других приложениях UCP, кажется, работает нормально и справляется практически со всем, что я к нему добавляю, но приложение Thread Pool является основным приложением, и я не могу рисковать GC Exception в работе.