2010-08-27 4 views
13

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

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

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

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

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

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

Благодаря

ответ

8

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

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

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

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

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

+2

Ссылка обновлена: http://jaxb.java.net/guide/Performance_and_thread_safety.html –

+0

@ThangPham - Спасибо, я обновил свой ответ с новой ссылкой, которую вы предоставили. –

+0

Это также известная проблема с выпуском JAXB для Java 7? Решение, которое вы дали, все равно будет иметь место, но было бы хорошо знать, стоит ли еще активно следить за этим. –

1

Да, это утечка. Он будет загружать класс «ruby.oracle_servlet.schemas» при каждом вызове этого метода.

JAXBContext.newInstance(“ruby.oracle_servlet.schemas”) 

 Смежные вопросы

  • Нет связанных вопросов^_^