目录
- 一、Java序列化概述
- 二、什么时候用序列化?
- 三、项目创建很多对象怎么优化?
- 优化思路一:加条件判断
- 优化思路二:使用clone浅拷贝
一、Java序列化概述
简单说就是为了保存在内编程客栈存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保存objectstates,但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化。
- 序列化:将Java对象转换成字节流的过程。
- 反序列化:将字节流转换成Java对象的过程。
- 当Java对象需要在网络上传输或者持久化存储到文件中时,就需要对Java对象进行序列化处理。
- 序列化的实现:类实现Serializable接口,这个接口没有需要实现的方法。实现Serializable接口是为了告诉jvm这个类的对象可以被序列化。
二、什么时候用序列化?
- 当你想把的内存中的对象状态保存到一个文件中或者数据库中时候;
- 当你想用套接字在网络上传送对象的时候;
- 当你想通过RMI传输对象的时候。
三、项目创建很多对象怎么优化?
场景:
- 当一个类存在继承关系时,你创建一个子类的对象时,如果在没有明确指定的情况下,子类是会隐式的去调用父类的无参构造的。假设,我们需要频繁创建的对象,是一个继承关系比较深的类的话,调用构造函数的开销不容小窥。
- 如果一时间内,频繁创建某对象时,这些平时不显眼的消耗一叠加起来,就变得很客观了。但是,当我们使用clone的话,就可以避免这个问题。
- 大数据开发,消费kafka后,实例化到对象上,频繁创建对象。
优化思路一:加条件判断
假如创建的对象,需要在 if 判断条件中使用,则在 if 判断条件中new新对象,这样可以减少对象的创建。
优化思路二:使用clone浅拷贝
clone的最大特点就是,不会去调用任何构造方法
- 对于需要频繁创建的实体类,需要实现Serializable和Clon编程客栈eable接口
- 在此实体类中写一个getInstance(),其中就是返回clone()
- 在方法中新建对象的时候,直接getInstance()就可以。
import lombok.Data; import java.io.Serializable; @Data public class User implements Serializable,Cloneable{ private static finhttp://www.devze.comal long serialVersionUID = 1L; private static User user = new User(); /** * 用户id */ private Long userId; /** * 用户名称 */ private String userName; /** * 调用对象创建优化 * @return 开发者_开发学习 */ public static User getInstance(){ try { return (User) user.clone(); } catch (CloneNotSupportedException e) { e.printStackTrace(); } return new Ushttp://www.devze.comer(); } }
if (flag) { // 将创建对象放到if中,不进入if则不创建,提高效率 //SysMenuManagerGrant grant = new SysMenuManagerGrant(); User user = User.getInstance(); }
到此这篇关于浅谈java什么时候需要用序列化 的文章就介绍到这了,更多相关java 序列化 内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家php以后多多支持我们!
精彩评论