2010-11-30 15 views
2

最近、Unix上で実行されているグラスフィッシュインストールにアプリケーションをデプロイしましたが、コードの一部で重大なパフォーマンス上の問題が発生しています。 私のアプリケーションはXMLを介して別のシステムと通信する必要があり、私はJaxbを使って交換されたメッセージの整列化/整列化を行っています。 各通信には、1つのマーシャリングと1つの非マーシャル操作が必要です。 私のコンピュータ(Windows XP)でアプリケーションを実行すると、両方の操作の合計量は2秒未満ですが、同じアプリケーションを同じデータで実行すると、Unixでは総量が20秒近くになります。ほぼ10倍。 サーバーログを徹底的に検索してヒントを探しましたが、役に立たないものは何も見つかりませんでした。ここでGlassfish/Unixのマーシャリング/アンマーシャリングに関するパフォーマンス上の問題

は、両方の呼び出しのためのコードです:

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、ご返信ありがとうございます。私はコードを改善することができると理解していますが、これをやろうとしていますが、UnixとWindowsの両方のマシンの動作の違いはまだ説明していません。 –

+0

オペレーティングシステムだけの違いはありますか?プロセッサー、RAM、JDKバージョン、システム負荷などはどうですか? –

+0

すべてが違います、Unixマシンの構成は分かりません(16GBのRAMを搭載したHPマシンだと分かります)。 –

関連する問題