1、创建对象的模式
(1) 单例模式,创建一个全局对象,每次调用使用同一个实例
(2) 原型模式,每次调用都新建一个对象
如果使用springmvc还有两种方式
(3) session,一个session会话,使用一个对象实例
(4) request, 一个request请求,使用一个对象实例
2、Spring默认对象创建是单例模式,那单例模式有什么优势
单例模式在全局服务只需要创建一个对象,减少重复创建,提高性能。
具体执行是这样,每个新创建的对象都放在jvm的新生代里,而新生代的容量是一定的,如果对象不断创建,会频繁触发垃圾回收,有时还会导致fullGC,严重影响性能。
3、单例陷阱
单例陷阱是在多线程的问题
一个线程创建一个独立栈帧,栈帧存储方法的局部变量,而全局变量存储在堆中。这时全局变量就是不安全的,获取到的值可能是另一个线程的临时值。
4、单例陷阱解决方法
(1) 减少使用全局便令
(2) 不变变量加入final
(3) 使用static全局变量