2010-11-30 4 views
2

최근에 유닉스에서 실행되는 글래스 피쉬 설치에 응용 프로그램을 배포했으며 코드 섹션에 심각한 성능 문제가 있습니다. 내 응용 프로그램은 XML을 통해 다른 시스템과 통신해야하며 Jaxb를 사용하여 교환 된 메시지의 마샬링/언 마샬링을 수행합니다. 각 통신에는 마샬링 및 언 마샬 조작이 필요합니다. 컴퓨터에서 응용 프로그램을 실행할 때 (Windows XP) 두 작업의 총 작업량은 2 초 미만이지만 동일한 응용 프로그램을 동일한 데이터로 실행하면 Unix에서 총 작업량이 20 초 가까이됩니다. 거의 10 배 더. 서버 로그를 철저히 조사했지만 단서를 찾지 못했지만 아무 것도 찾을 수 없었습니다.글래스 피쉬/유닉스의 마샬링/언 마샬링 성능 문제

public static <T> String marshal(T transaction) throws JAXBException, IOException { 
     JAXBContext jc = JAXBContext.newInstance(transaction.getClass().getPackage().getName()); 
     Marshaller u = jc.createMarshaller(); 

     ByteArrayOutputStream baos = new ByteArrayOutputStream(); 

     u.setProperty("jaxb.encoding", "ISO-8859-1"); 
     u.marshal(transaction, baos); 

     String xml = new String(baos.toByteArray()); 

     baos.close(); 

     return xml; 
    } 

    public static <T> T unmarshal(Class<T> docClass, String xml) throws JAXBException, IOException { 
     String packageName = docClass.getPackage().getName(); 

     InputStream is = new ByteArrayInputStream(xml.getBytes()); 

     JAXBContext jc = JAXBContext.newInstance(packageName); 
     Unmarshaller u = jc.createUnmarshaller(); 
     Object o = u.unmarshal(is); 

     is.close(); 

     return (T) o; 
    } 

누군가가이 문제를 좀 도와 줄래 : 여기

은 모두 통화 코드?

종류와 관련,

카를로스 페레이라

답변

1

JAXBContext에이 스레드하고 공유 할 수 있습니다. 그것은 끊임없이 창조 될 필요가 없습니다. 이렇게하면 성능이 향상됩니다.

+0

안녕 Blaise, 답장을 보내 주셔서 감사합니다. 나는 코드를 개선 할 수 있다고 생각하지만, 그렇게하려고 노력하고있다.하지만 여전히 유닉스와 윈도우의 두 시스템에서 동작의 차이를 설명하지는 않는다. –

+0

운영 체제가 유일한 차이점이 있습니까? 프로세서, 램, JDK 버전, 시스템로드 등은 어떻습니까? –

+0

모든 것이 다르기 때문에 Unix 시스템의 구성을 알지 못합니다 (16GB 램이있는 HP 시스템이라는 것을 알고 있습니다). –