我正在調試和修復一個複雜的應用程序,它與一個巨大的Java對象(〜250M)一起工作。如何快速序列化/反序列化複雜的java對象
我用另一個程序創建了這個對象。目前我使用XStream從硬盤加載並保存這個對象,但解析它需要一分多鐘。 它減慢了開發過程。
JAXB更快嗎?有沒有其他的方法來加載和保存這個巨大的東西?
我正在調試和修復一個複雜的應用程序,它與一個巨大的Java對象(〜250M)一起工作。如何快速序列化/反序列化複雜的java對象
我用另一個程序創建了這個對象。目前我使用XStream從硬盤加載並保存這個對象,但解析它需要一分多鐘。 它減慢了開發過程。
JAXB更快嗎?有沒有其他的方法來加載和保存這個巨大的東西?
在這種情況下,我會序列化數據,這將使它更小,更快。您可以對關鍵類進行外部化,以進一步提高速度。這裏是我最近做的一些測試Protobuf vs Thrift vs Java Serialization它與kovica建議的基準相同,但是最近在更新的硬件/軟件上運行。
如果您需要加快速度,可以使用內存映射數據。這很難合作,但你無法擊敗表現。如果數據已經在磁盤緩存中,則可以加載250 MB爲幾十毫秒。如果不是,您將受到您的驅動器速度的限制,例如一個緩慢的40 MB/s驅動器將需要大約8秒。
我寫了一個庫使用內存映射文件被Java Chronicle
我從來沒有使用過XStream,但根據他們的文檔,它生成XML,對吧?你需要將這些對象存儲在XML中嗎? 如果你只需要對象存儲到磁盤,然後有幾個不同的方法,你可以使用:
也看這裏:High performance serialization: Java vs Google Protocol Buffers vs ...?
我會推薦Java serializa重刑給他人。它可以利用重用堆中的對象(例如:String的intern()方法),而不是創建新對象(與其他序列化器通常一樣)。這減少了有效載荷的總量。
你能使用二進制的格式?我不希望JAXB更快。 –
我不在乎它是什麼格式...... –