Po niedawnym wdrożeniu w teście systemowym, jedna z naszych serwletów zaczęła działać znacznie ostrzej niż zwykle i zauważyliśmy, że pamięć zaczęła się wspinać, a weblogia w końcu zginęła. Mój stażysta, byłem bardzo dumny, odkryłem źródło wycieku pamięci.JAXBContext.newInstance wyciek pamięci
Kiedykolwiek wniosek przychodzi, linia ta jest wywoływana:
JAXBContext jc = JAXBContext.newInstance(“ruby.oracle_servlet.schemas”);
Z jakiegoś powodu, obiekt nigdy nie dostaje śmieci zebrane. Kiedy już zrobiliśmy to statycznie i przenieśliśmy się tam, gdzie go zainicjowaliśmy, nasz wyciek pamięci zniknął.
Kolejny z naszych programistów umieścił tę linię w pętli while w autonomicznej aplikacji java, a także zobaczył, że pamięć działa w górę iw górę.
Czy ktoś ma jakieś pomysły, dlaczego ten obiekt nie zbiera śmieci?
Dzięki
link aktualizacja: http://jaxb.java.net/guide/Performance_and_thread_safety.html –
@ThangPham - Dzięki, zaktualizowałem moją odpowiedź z nowym linku podałeś. –
Czy jest to również znany problem z wydaniem JAXB dla Java 7? Podane rozwiązanie nadal będzie obowiązywać, ale dobrze byłoby wiedzieć, czy nadal jest to coś, na co warto uważać. –