2016-09-02 6 views
0

ByteBufferに直列化オブジェクトを書き込む必要があります。オーバーヘッドのコピーや中間の変換を行わずにそれを作成する最速の方法は何ですか?直接バッファにオブジェクトを書き込む最も速い方法は何ですか?

私はopenmpi-javaを介して大きなオブジェクト(2GB以上)を転送する必要があります。これはダイレクトバッファのみを使用する可能性があるため、提案したアイデアを基にしたいと思います。

+2

自分でシリアル化してください。あらゆる種類の自動化された操作は遅くなるでしょう。 –

答えて

0

私が行うことは、ByteBufferをラップするOutputStreamを作成することです。あなたの好きなシリアル化ツールにOutputStreamを渡します。私はこれをサポートするByteBufferの代わりに、追加するのは簡単です。

BTWほとんどのシリアル化ライブラリは、標準のJavaシリアル化よりも高速です。

0

概念的には、 JVM自体だけがオブジェクトを構成するメモリ内のバイトに直接アクセスできます。したがって、どんな種類のシリアライゼーションツールを選択しても、変換とコピーの一定量はでなければなりません。が発生します。

オブジェクトのフィールドを取得するように実際に求めているので、メタ情報に応じて、の内容をいくつかのバイトにコピーします。それは単純にコピー/コンバージョンなしでは動作しません。

さらに、あなたがここで「正しい」問題を見ているのではないかと思います。シリアライズ自体はコストのかかる操作です。それを行うには多くの方法があります。それらは大きく異なる特性を有する。

私が言っていることは、パフォーマンスについて心配する必要はありますか?あるいは、これを使用することによる長期的な影響やそのシリアライゼーション手法について、もっと多くの時間を費やしていたかもしれません。または、オブジェクトの直列化に関連するセキュリティリスク?

ロングストーリーショート:のパフォーマンスはどういう意味ですか?

関連する問題