云栖问答

找不到答案?去提问题

2016-07-20 20:27:14

深拷贝会不会对内存有影响


来源: [直播] 基于Java容器的多应用部署技术实践

会不会占用更多的内存

2个回答

0

xwaby

深拷贝会拷贝所有的属性,并拷贝属性指向的动态分配的内存。当对象和它所引用的对象一起拷贝时即发生深拷贝。深拷贝相比于浅拷贝速度较慢并且花销较大。

0

weipeng2k

深拷贝与序列化相比,相反对于内存的开销会更好,原因在于序列化是将所有的数据变为bytes,而深拷贝在处理基本数据类型时直接传递引用。

比如一个数据对象Person

,----------------------.
|Person                |
|----------------------|
|-String name;         |
|-String password;     |
|-String title;        |
|-int rank;            |
|-int age;             |
|----------------------|
|+String getName();    |
|+String getPassword();|
`----------------------'

如果是序列化需要将Person转化成为一堆bytes,那么里面的name、password等数据都需要按照对应的序列化协议放置到那堆bytes中。

可是如果是深拷贝,Person从一个加载器识别的对象转换成另一个加载器识别的对象,这两个对象对于name,password这些基础属性的引用是同一份。如果name的值是 abc ,那么序列化就会有两份内存(对象和序列化后的bytes)存储两个 abc , 而深拷贝只有一份。

1
GO
1823
浏览
0
收藏
邀请他人回答