最近、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;
}
誰かがこの問題で私を助けることができますか?
種類について、
カルロスフェレイラ
こんにちは、Blaise、ご返信ありがとうございます。私はコードを改善することができると理解していますが、これをやろうとしていますが、UnixとWindowsの両方のマシンの動作の違いはまだ説明していません。 –
オペレーティングシステムだけの違いはありますか?プロセッサー、RAM、JDKバージョン、システム負荷などはどうですか? –
すべてが違います、Unixマシンの構成は分かりません(16GBのRAMを搭載したHPマシンだと分かります)。 –