Мне трудно отследить это, поскольку профилировщик продолжает падать (ошибка горячей точки). Прежде чем я углублюсь в выяснение этого, я хотел бы знать, действительно ли у меня есть проблема или нет: -)
У меня есть несколько пулов потоков, созданных с помощью: Executors.newFixedThreadPool (10); Потоки подключаются к разным веб-сайтам, и иногда я получаю отказ в соединении и в результате получаю исключение.
Когда я позже вызову Future.get () для получения результата, он будет перехватывать исключение ExecutionException, которое оборачивает исключение, которое было выброшено при невозможности установить соединение.
Программа использует довольно постоянный объем памяти вплоть до момента времени, когда создаются исключения (они, как правило, происходят в пакетном режиме, когда конкретный сайт перегружен). После этой точки память снова остается постоянной, но на более высоком уровне.
Так что мой вопрос в том, является ли поведение памяти (сообщаемое "top" в Unix) ожидаемым, потому что исключения только что-то сработали, или у меня, возможно, есть фактическая утечка, которую мне нужно отследить? Кроме того, когда Future.get () генерирует исключение, есть ли что-то еще, что мне нужно сделать, кроме перехвата исключения (например, вызова Future.cancel () для него)?
РЕДАКТИРОВАТЬ: поэтому я рассказал о нескольких инструментах, и с точки зрения Java, нет ничего, что могло бы привести к утечке памяти. Я поиграюсь с другим кодом, который живет долго и через некоторое время выдает исключение, и посмотрю, увеличивается ли память, сообщаемая "top". Похоже, это может быть какая-то странность.