Утечка памяти в JAXBContext.newInstance

После недавнего развертывания в системном тесте один из наших сервлетов получил удар намного сильнее, чем обычно, и мы заметили, что память начала расти, и weblogic в конечном итоге умрет. Мой стажер, я был очень горд, обнаружил источник утечки памяти.

Всякий раз, когда приходит запрос, эта строка вызывается:

JAXBContext jc = JAXBContext.newInstance(“ruby.oracle_servlet.schemas”);

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

Еще один из наших разработчиков поместил именно эту строку в цикл while в автономном Java-приложении, а также увидел, как память переползает вверх и вверх.

У кого-нибудь есть идеи, почему этот объект не собирается мусором?

Спасибо

13
задан bdoughan 29 September 2010 в 16:53
поделиться

1 ответ

Какую реализацию и версию JAXB вы используете? Если вы используете эталонную реализацию, поставляемую с Java SE 6, то это Metro (https://jaxb.dev.java.net/).

Вот некоторые из ошибок, связанных с памятью:

Если вы используете реализацию MOXy (http://www.eclipse.org/eclipselink/moxy. php), тогда я могу помочь с отладкой.

Хорошей новостью является то, что JAXBContext является потокобезопасным и должен создаваться только один раз и использоваться повторно. Повторное использование JAXBContext также устраняет утечку памяти.

Для получения дополнительной информации см.:

8
ответ дан 2 December 2019 в 01:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: