2011-09-07 5 views
2

XML 이벤트를 구문 분석하고 RabbitMQ 버스로 푸시하는 책임이있는 webapp에 메모리 문제가 있습니다. 이 웹 애플리케이션은 서블릿에서 XML 이벤트를 수신하고 디코드 한 다음 버스로 보내면 보낸 사람을 확인합니다. 우리는 현재 java 5에서 org.xml.sax.helpers.DefaultHandler을 사용하고 있지만 Stax (XMLStreamReader 포함)은 훨씬 읽기 쉽고 읽기 쉽지만 코드를 java6으로 마이그레이션해야합니다 (this question 참조). 그만한 가치가 있니?Java에서 XML을 구문 분석하는 가장 메모리 효율적인 방법은 무엇입니까?

Java에서 XML을 구문 분석하는 가장 메모리 효율적인 방법은 무엇입니까? 우리는 을 찾고 있습니다., , 메모리 효율이이며 읽기/쓰기가 쉽습니다. 이것이 존재합니까?

+4

- 다음은 자바 증명

처리 XML이다. SAX는 스트림 기반이기 때문에 메모리 오버 헤드가 매우 낮습니다. 메모리에있는 전체 문서 캐싱과 같은 작업을 수행하고 있습니까? –

+0

우리는 메모리에있는 문서를 캐싱하지 않으며 스트림을 읽습니다. 코드는 괜찮 았지만, 이제 우리는 더 많은 이벤트를받습니다. –

답변

3

이벤트 기반 파서는 AST를 구성하지 않으므로 빠르고 효율적입니다. XML 표준은 SAX standard에 의해 정의됩니다.

The Xerces implementation claims to be fast.

+2

Java 1.6에 포함 된 표준 JAXP 파서에 비해 최신 Xerces (2.11.0)를 사용할 때 성능이 크게 향상되었습니다. 대형 XML 파일을 구문 분석하는 데 소요되는 시간은 절반에 불과했습니다. –

+1

나는 누군가가 같은 질문을 한 경우를 대비해 논평 할 것이라고 생각했다. AST는 추상 구문 트리 – ThisClark

1

NanoXML는 SAX 구문 분석을 지원하는 매우 작고 가벼운 XML 파서입니다. Xerces의 좋은 대안입니다.

+0

이 메모리 효율적인 것인가? –

+1

추가 조사에서 NanoXML은 메모리 효율이 떨어졌습니다. – mcfinnigan

+0

고맙습니다. 때때로 새로운 라이브러리를 발견하는 것이 좋습니다. –

0

Sax를 언급 한 답변에주의를 기울여야합니다. Sax는 그다지 유용성이 희박하기 때문에주의해야합니다. 유용성을 희생시키지 않고 가장 메모리 효율적인 색소폰 분석은 vtd-xml입니다. 나는 SAX 파서가 메모리 문제를 일으키는 믿을 수있는 성능 벤치 마크 http://sdiwc.us/digitlib/journal_paper.php?paper=00000582.pdf

관련 문제