Java序列化是缩小内存占用的工具吗?

Pet*_*ann 5 java memory performance serialization

Java中的序列化总是必须缩小用于保存对象结构的内存吗?或者是有可能的是序列化将有更高的费用?

换句话说:序列化是一种缩小Java中对象结构内存占用的工具吗?


编辑
我完全知道序列化的目的是什么,但无论如何,谢谢:-)但是你知道,工具可能被误用.我的问题是,它是否是减少内存使用量的好工具.

那你可以想象出什么原因,为什么内存使用应该增加/减少?在大多数情况下发生什么?

Sea*_*wen 6

否...序列化是一种将对象状态的表示形式写入或读取为字节数组的方法.它不是替代的内存表示.对象的序列化形式可能消耗或不消耗比JVM内部更多的字节; 通常它会相当可比.在极少数情况下,它可能更多,有时对象的状态可以以比在堆上消耗更少的字节的方式完全序列化.但不回答这个问题,它不是"减少内存占用的工具".


Ste*_*n C 4

我的问题是,它是否是减少内存使用的好工具。

不,这不是一个很好的工具。序列化对象表示包括大量描述对象的类型和表示的“元数据”。除非您将大量对象序列化到一个“流”中,否则“元数据”开销将使序列化形式比原始形式更大。忽略此开销,序列化表示通常更紧凑,但节省将在很大程度上取决于对象的表示类型。(有关更多详细信息,请参阅“对象序列化流协议” 。)

正如其他答案所提到的,在序列化和反序列化时,您会暂时增加内存使用量,因为您必须同时保存串行和对象表示以及用于处理循环等的映射。

如果您想在内存中以紧凑的形式表示数据结构,那么最好开发自己的特定于应用程序的序列化方案。但在我看来,最好将数据写入文件系统或数据库。