关于java对象序列化问题

 

看到javaeye上面讨论web机群负载时后面有一个关于缓存机制(memcach)中由于使用java对象序列化而导致时耗太大(后证明是错的),以及由于Java默认的序列化机制的开销过高,导致Java不太容易实现SNA架构。而SNA架构被证明是运行大容量网站的非常成功的方案(后证明也是是错的,序列化机制开销不高)

现整理下序列化一些知识:

java对象在序列化时,他分两个部分,首先是序列化类,然后序列化对象里得数据,序列化类得时候是采用深度优先得遍历 类和他引用到其他得类(和类加载过程一样)。

 

对于他得时耗

0:第一次使用序列化机制时,也应该会有些时耗。

1:序列化的开销主要是在初次序列化上,即一个类已经有对象被序列化过,那么以后再次序列化是几乎没有什么开销的。
2:因为有synchronized,所以在多线程情况大部分都开销在这个上面了,真正的序列化动作反而没什么开销。

序列化优化方案:
1:把所有需要序列化的对象的类提前初始化一次
2:自己实现writeObject那部分,去掉synchronized

对于在整个讨论中出现得测试用例,

可以很明确得看出

第一次序列化时,时耗大。

同类型同对象以后序列化时,由于jvm采用缓存技术,基本没有时耗,<1ms。

同类型不同对象以后序列化时,由于jvm已经加载过类了,这里仅序列对象数据,时耗也非常小,<1ms应该比上面得稍微大点。

而不同类型不同对象在序列化时(这里针对http://www.javaeye.com/topic/20298?page=16讨论区里charon测得平均时耗为2ms)这个应该是应为这些序列化对象,所引用得对象都相同,所以这里要省下一大部分时间,所造成得,应为在前面测试别得一个相似序列化对象时,把他所引用得对象已经序列化过了,所以如果要是重新序列化一个新的对象一般要比这个大一些,大概在10ms-50ms吧

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值